Objective c UITableView附件添加到索引0时添加到其他单元格

Objective c UITableView附件添加到索引0时添加到其他单元格,objective-c,ios,cocoa-touch,uitableview,Objective C,Ios,Cocoa Touch,Uitableview,我很难理解UITableView背后的一些逻辑。我正在从MPMediaItemCollection将我的表填充为歌曲队列。我试图实现的是在索引路径上有一个正在播放的指示器作为单元格的附件视图,它与当前播放的歌曲相匹配 我最初尝试了以下方法: if (indexPath.row == [mutArray indexOfObject:[mainViewController.musicPlayer.nowPlayingItem valueForProperty:MPMediaItemPropertyT

我很难理解
UITableView
背后的一些逻辑。我正在从
MPMediaItemCollection
将我的表填充为歌曲队列。我试图实现的是在索引路径上有一个正在播放的指示器作为单元格的附件视图,它与当前播放的歌曲相匹配

我最初尝试了以下方法:

if (indexPath.row == [mutArray indexOfObject:[mainViewController.musicPlayer.nowPlayingItem valueForProperty:MPMediaItemPropertyTitle]]) {        
    UIImageView *playButtonView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"PlayButton.png"]];
    [cell setAccessoryView:playButtonView];
}
这适用于正在播放的项目,它实际上总是
objectAtIndex:0
。但我不明白的是,为什么我的表似乎在组合可见单元格的每个高度定义一次索引

让我试着更清楚地解释这一点。假设我的桌子是600px高,它的内容高度是1800px。这导致在内容高度下大约每600px添加一次指示器

现在我的第一个想法是,根据歌曲名称判断索引的代码有问题,因此我尝试将其更改为:

if (indexPath.row == 0)
但这会产生同样的结果

这个截图应该有助于解释我在说什么


那么,我能做些什么来让表将
indexPath0
视为引用整个表的第一个单元格,而不是引用当前可见的单元格吗?

您还必须明确说明附件何时不应存在:

if (indexPath.row==0) {
   UIImageView *playButtonView = [[UIImageView alloc] initWithImage:
     [UIImage imageNamed:@"PlayButton.png"]];
   [cell setAccessoryView:playButtonView];
} 
else {
   [cell setAccessoryView:nil];
}
原因是,当单元格0在另一行上退出队列(即重新使用)时,其中仍包含附件视图


事实上,这是一个很好的案例研究,有助于理解将表视图单元格出列实际上是如何工作的;-)

您还必须明确说明附件何时不应存在:

if (indexPath.row==0) {
   UIImageView *playButtonView = [[UIImageView alloc] initWithImage:
     [UIImage imageNamed:@"PlayButton.png"]];
   [cell setAccessoryView:playButtonView];
} 
else {
   [cell setAccessoryView:nil];
}
原因是,当单元格0在另一行上退出队列(即重新使用)时,其中仍包含附件视图


事实上,这是一个很好的案例研究,有助于理解将表视图单元格出列实际上是如何工作的;-)

这就是tableview重用单元格的方式:当单元格滚动出屏幕时,它被添加到重用池中,所以一旦您将附件视图添加到单元格中,并且该单元格被重用,您将在滚动时在随机位置看到它


您可以在
-willDisplayCell:forIndexPath
中检查单元格索引,并添加(如果未添加)、隐藏(如果有,但不是您想要的索引)或显示(如果有,并且是您的索引),或者将附件视图添加到所有单元格中,并根据需要显示/隐藏。

这就是tableview重用单元格的方式:当单元格滚动出屏幕时,它将被添加到重用池中,因此一旦您将附件视图添加到单元格中,并且该单元格被重用,您将在滚动时在随机位置看到它

您可以在
-willDisplayCell:forIndexPath
中检查单元格索引,然后添加(如果未添加)、隐藏(如果有,但不是您所需的索引)或显示(如果有,并且是您的索引),或者向所有单元格添加附件视图,并根据需要显示/隐藏