UITableView单元格无法快速更新

UITableView单元格无法快速更新,uitableview,pushviewcontroller,Uitableview,Pushviewcontroller,我有一个自定义单元格的UITableView。一个单元格导航到另一个UINavigationController。此单元格包含一个颜色标签。从新的UIViewController返回表格视图时,颜色标签显示滞后 为了更好地理解,我制作了一个视频: 为什么会有这种奇怪的行为?我以为tableview存储了它的状态 我已经实现了tableView:cellForRowAtIndexPath:,它从NIB文件中对单元格进行除名,并实现了tableView:willDisplayCell:forRow

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

为了更好地理解,我制作了一个视频:

为什么会有这种奇怪的行为?我以为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.5秒,你会发现在我们离开表格视图之前,红色矩形已经消失了

因此,事件的顺序是:

  • 用户轻触单元格并将其选中。红色矩形消失了

  • 提出了一种新的视图控制器

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

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

    你有两个选择:

    • 修复红色矩形,使其即使在选中或高亮显示时也是红色矩形。我不能确切地告诉你怎么做,因为你隐瞒了事实,没有透露这个红色矩形是什么,它是如何配置的,等等

    • 或者,将表视图控制器的
      clearselectiononviewwillappear
      设置为YES。这将导致取消选择更快地进行。然而,这是懒人的方式;您最好弄清楚为什么选中/高亮显示时红色矩形会消失


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

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    

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