2012-04-07 102 views
0

我正在創建一個自定義表格,其中包含一個允許用戶在按下時預覽歌曲的按鈕。我的大部分代碼都可以工作,但我還沒有想出如何將播放器傳遞給與按下按鈕的行相對應的特定歌曲。用UITableView播放按鈕的歌曲

例如:如果我有兩行,#1說Jay Z和#2說紅辣椒,我想按下#1按鈕來播放Jay,並按下#2中的按鈕來獲得辣椒。簡單。我的代碼有缺陷,無論按下哪一行按鈕,我都只能播放同一首歌曲。

我知道這是爲什麼發生,但我不知道如何解決它。我只是想知道是否有人可以用幾條線打我,這可能會讓我指向正確的方向。

我不能使用didSelectRowAtIndexPath,因爲我希望在選擇行本身時發生其他事情。

我需要爲此創建一個方法還是有一些我忽略了的東西?

謝謝!

回答

1

您還可以設置您創建的每個按鈕的tag財產時tableView: cellForRowAtIndexPath:,那麼當被稱爲你的buttonTapped事件,仰望sender並找到其tag。 UIView的tag屬性僅用於解決這類問題。

如果您需要更多信息,您可以創建一個UIButton子類,用於存儲任何或所有關於相關歌曲的信息。再次,您在cellForRowAtIndexPath期間設置該信息,以便在點按該按鈕時進行檢索。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    // Dequeue a cell and set its usual properties. 
    // ... 

    UIButton *playButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [playButton addTarget:self action:@selector(playSelected:) forControlEvents:UIControlEventTouchUpInside]; 
    // This assumes you only have one group of cells, so don't need to worry about the first index. If you have multiple groups, you'll need more sophisticated indexing to guarantee unique tag numbers. 
    [playButton setTag:[indexPath indexAtPosition:1]]; 

    // ... 
    // Also need to set the size and other formatting on the play button, then make it the cell's accessoryView. 
    // For more efficiency, don't create a new play button if you dequeued a cell containing one - just set its tag appropriately. 
} 

- (void) playSelected:(id) sender; 
{ 
    NSLog(@"Play song number %d", [sender tag]); 
} 
+0

謝謝!我要去檢查一下。 – 2012-04-07 16:31:51

1

喜歡的東西

- (void)buttonTapped:(UIView *)sender; 
{ 
    CGPoint pointInTableView = [sender convertPoint:sender.bounds.origin toView:self.tableView]; 
    NSIndexPath *tappedRow = [self.tableView indexPathForRowAtPoint:pointInTableView]; 

    // get song that should be played with indexPath and play it 
} 
1

像中的tableView:的cellForRowAtIndexPath:給你的按鈕標記爲index.row和下面的功能結合到按鈕的觸內部事件

-(void)button_click:(UIView*)sender 
{ 
    NSInteger *index = sender.tag; 
    //play song on that index 
} 

我認爲這將有助於您!

+0

謝謝!我會嘗試我收到的所有內容,並看看哪個最好。 – 2012-04-07 16:32:24