当UITableViewCell在屏幕滚动时变得不可见时,如何添加自定义代码?

时间:2013-03-11 11:18:20

标签: ios cocoa-touch uitableview

这个问题与this one非常相似,但是那里没有答案,我不能在这个问题上发表评论或做任何事情,并且情况稍有不同。

我有自定义tableViewCell,其中包含一些自定义视图。此自定义视图中包含UIImageView和UIActivityIndi​​catorView,并且还附加了自定义加载程序类。当该视图首次出现时,它的图像被隐藏,activityIndi​​cator正在动画,然后启动加载过程(图像从某个URL加载),当图像成功加载时,它出现在我的自定义视图中。 一切都很完美,但当我快速滚动tableView时,我有很多背景NSURLConnections工作是徒劳的。我还创建了一些方法来取消我的后台连接,但是当我需要它时我无法调用它们 - 当tableViewCell变为屏幕外时,没有方法被调用。我真的需要一些活动,所以我可以取消我的背景连接。有没有办法做到这一点?我真的不想检查tableViewCell是否仍然在每个连接中可见:didReceiveData:,这是非常蹩脚但目前它似乎是实现我需要的唯一方法。

1 个答案:

答案 0 :(得分:2)

我的建议是在您的UITableViewCell prepareForReuse:方法中取消您的网络请求。这很简单,也意味着如果单元格略微偏离屏幕然后重新打开,您将无法取消请求。 (当您返回要重用的单元格时,也可以在tableView:cellForRowAtIndexPath:中执行此操作。)

您可能还想在快速滚动时考虑避免首先启动这些负载;您可以在scrollViewWillBeginDragging:上停止加载并等待,直到从表视图中回复scrollViewDidEndDragging:willDecelerate:,然后才能开始对可见单元格的实际URL请求。