当uitableviewcell被破坏时的iOS回调

时间:2012-05-28 12:57:04

标签: ios uitableview

当用户在uitableview中向上和向下滚动时,单元格将被销毁并创建。

有没有办法检测细胞什么时候会被破坏?

5 个答案:

答案 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:或任何其他相关方法。

,我不确定在单元格变为不可见之后是否会触发它

祝你好运, 迈克尔