UITableView 单元格不会快速更新

Posted

技术标签:

【中文标题】UITableView 单元格不会快速更新【英文标题】:UITableView cell does not update quickly 【发布时间】:2014-06-01 16:02:54 【问题描述】:

我有一个带有自定义单元格的UITableView。一个单元格导航到另一个UINavigationController。此单元格包含一个颜色标签。当从新的UIViewController 返回到表格视图时,颜色标签会滞后显示。

为了更好地理解,我制作了一个视频: http://youtu.be/zsWt97pxCu0

为什么会出现这种奇怪的行为?我认为 tableview 存储它的状态。

我已经实现了tableView:cellForRowAtIndexPath:,它将单元格从 NIB 文件中取出,tableView:willDisplayCell:forRowAtIndexPath: 填充了红色标签。另外我已经实现了以下过渡:

-(void) tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    if(indexPath.section == 1) 
        if(indexPath.row == 0) 
            UIViewController* ctrl = [[UIViewController alloc] init];
            ctrl.preferredContentSize = CGSizeMake(240, 200);
            [self.navigationController pushViewController: ctrl animated:YES];
        
    

【问题讨论】:

【参考方案1】:

“滞后”是由于单元格处于选定状态时发生的变化。如果您仔细查看电影的第 1.5 秒,您会发现红色矩形在我们离开表格视图之前就已经消失了

因此,事件的顺序是:

    用户点击单元格并将其选中。红色矩形消失了!

    新的视图控制器出现了。

    显示的视图控制器被弹出,我们回到表格视图,单元格仍然被选中。选择单元格时,红色矩形仍然不可见。然后,在表格视图控制器故意施加的延迟之后,单元格被取消选择 - 红色矩形再次出现!

基本上你是在打自己的脸(隐藏红色矩形),然后抱怨你的脸被打了。如果你不喜欢被打,就不要打自己!

你有两个选择:

修复红色矩形,使其成为红色矩形即使它被选中或突出显示。我不能准确地告诉你怎么做,因为你隐瞒了事实,没有透露任何关于这个红色矩形是什么、它是如何配置的等等。

或者,将表视图控制器的 clearsSelectionOnViewWillAppear 设置为 YES。这将导致取消选择更快地发生。然而,这是懒人的方式;你最好弄清楚为什么你的红色矩形在选择/突出显示时消失了。

【讨论】:

【参考方案2】:

根据@matt 的帮助,我正确设置了单元格的选择样式:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

【讨论】:

好的,但是您应该真正弄清楚为什么矩形在选择/突出显示时会改变外观。我认为真正的原因是您正在使用标签。这不是制作红色矩形的正确方法。 (就是这样,我不会再唠叨你了,我保证!:)

以上是关于UITableView 单元格不会快速更新的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中的单元格在 iOS 中选择之前不会更新(swift)

UITableViewCell 布局在重用单元格之前不会更新

Swift 4 UITableView 将一个单元格设为 UITextView

在ios的uitableview中自定义单元格编辑样式

reloadRowsAtIndexPaths 不会更新我的单元格数据

UITableView 更新正确数量的 managedObjects,但不会显示值