【问题标题】:UITableView cell does not update quicklyUITableView 单元格不会快速更新
【发布时间】: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];
        }
    }
}

【问题讨论】:

    标签: uitableview pushviewcontroller


    【解决方案1】:

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

    因此,事件的顺序是:

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

    2. 新的视图控制器出现了。

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

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

    你有两个选择:

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

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

    【讨论】:

      【解决方案2】:

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

      cell.selectionStyle = UITableViewCellSelectionStyleNone;
      

      【讨论】:

      • 好的,但是您应该真正弄清楚为什么矩形在选择/突出显示时会改变外观。我认为真正的原因是您正在使用标签。这不是制作红色矩形的正确方法。 (就是这样,我不会再唠叨你了,我保证!:)
      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多