当用户在uitableview中向上和向下滚动时,单元格将被销毁并创建。
有没有办法检测细胞什么时候会被破坏?
答案 0 :(得分:11)
假设通过“被破坏”实际上指的是一个被重用的单元格,只需在prepareForReuse
派生类中实现UITableViewCell
即可。
<强> prepareForReuse 强>
准备一个可重用的单元格,供表视图的委托重用。
- (void)prepareForReuse
<强>讨论强>
如果UITableViewCell对象是可重用的 - 也就是说,它具有重用性 identifier - 在返回对象之前调用此方法 来自UITableView方法dequeueReusableCellWithIdentifier:。对于 性能原因,你应该只重置那个单元格的属性 与内容无关,例如,alpha,编辑和选择 州。 tableView中的表视图委托:cellForRowAtIndexPath: 重复使用单元格时应始终重置所有内容。如果是细胞 对象没有关联的重用标识符,此方法是 不叫。如果重写此方法,则必须确保调用 超类实现。
状况 适用于iOS 2.0及更高版本。 也可以看看 - initWithFrame:reuseIdentifier: @property reuseIdentifier 宣告进入 UITableViewCell.h
答案 1 :(得分:4)
不考虑适用性或性能的影响,另一种选择可能是使用UITableView类的visibleCells方法定期检查哪些单元格仍然可见:
- (NSArray *)visibleCells
根据文件:
返回一个包含UITableViewCell对象的数组,每个对象代表接收表视图中的可见单元格。
答案 2 :(得分:0)
您可以继承UITableViewCell
并覆盖它的dealloc
方法。
假设您正在重复使用单元格来保存资源,那么这样做有什么好理由吗?
答案 3 :(得分:0)
您尝试拦截的内容是UITableView内部实现的一部分,以及它如何管理其单元格。虽然有一些方法可以尝试拦截这种行为,但我建议您避免使用它们,因为无法保证UITableView的未来实现会保持这种行为。
在这种情况下考虑一种不同的方法会更好:它是设计和实现自己的表类,还是更改代码逻辑。
答案 4 :(得分:0)
如上所述,离开屏幕时细胞不会被破坏。但是,您可以执行一些操作,以跟踪相关操作,具体取决于您要执行的操作。
首先有一个委托消息:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
在单元格进入屏幕之前调用此方法。另一种可能性是已经说明的一个单元格的prepareForReuse方法。
另一种方法是:尝试并覆盖willMoveToSuperview:或任何其他相关方法。
,我不确定在单元格变为不可见之后是否会触发它祝你好运, 迈克尔