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