如何刷新单个UITableViewCells?

时间:2015-04-07 10:52:10

标签: ios objective-c iphone uitableview

我的UITableView只有很少的UITableViewCells,

根据索引路径播放不同的音频文件。

我在UITableViewCell中显示播放/暂停按钮。

在播放按钮上单击UITableViewCell,我想将上次播放的单元格的播放按钮状态重置为默认(播放)。

存储单元格索引,其中点按的播放按钮可以完成任务,但我们需要重新加载所有UITableView,而不是重新加载整个UITableView ,可以&#39 ;我们刷新/重新加载单个UITableViewCells?

任何帮助将不胜感激,

先谢谢。

4 个答案:

答案 0 :(得分:1)

两步: 1.通过重写你的UITableCellView按钮的动作方法找到新闻排 2.更新新闻界的图像

答案 1 :(得分:0)

摘要提示:当使用表格视图时,每个案例都在其 cellForRow 方法中实现,即在其数据源中。在状态或实际数据发生任何变化后,只需使用 reloadData 重新加载表格。 每次都为我工作。

更详细:在您的情况下 - 有一个全局索引var来显示哪一行正在播放'现在。在 cellForRow 中检查当前和全局索引是否匹配并显示正确的按钮。 请注意,您还可以将标记分配给任何视图(也是按钮),这对于了解每个按钮所属的行非常有用。

答案 2 :(得分:0)

如果你有选定单元格的IndexPath;那么你可以通过

获得细胞
UITableViewCell *cell = [UITableviewObj cellForRowAtIndexPath:selIndexPath];

现在你提到了细胞;你可以改变细胞内容。我建议不要通过这个过程改变细胞的高度。

答案 3 :(得分:-1)

如果我理解正确,当用户点击不同单元格中的“播放”按钮时,您希望暂停当前正在播放的按钮并播放新的按钮。之前的单元格图像应从“暂停”返回“播放”。

在您将“播放”更改为“暂停”并开始播放的代码中,保存该单元格的索引路径。下次单击“播放”时,检查是否已保存索引路径,获取单元格并重置其上的图像。像这样:

tableView:didSelectCell {
  if (lastPlayingCellPath) {
    MyCell *cell = [tableView cellForRowAtIndexPath:lastPlayingCellPath];
    [cell setPlayImage];
  }

  // Play Audio and change current cell image to Pause

  lastPlayingCellPath= selectedCellPath;
}

以上是伪代码,但你应该明白这一点。

编辑:从评论我发现你的自定义UITableViewCell子类处理tap事件。您可以发出开始播放的通知。每个单元格都会订阅该事件并重置其状态按钮。所以你可以在你的子类中做这样的事情

- (instancetype)init {
  // standard init code
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willPlay) name:@"CellWillPlayNotification" object:nil];
}

- (void)willPlay {
  [self setPlayImage];
}

-(void)buttonTapped {
  [[NSNotificationCenter defaultCenter] postNotificationName:@"CellWillPlayNotification" object:self];

// Do your standard handling of the tap
}