UITableViewCell在哪里被放回队列?

时间:2013-08-19 12:52:27

标签: iphone ios objective-c uitableview

我目前正致力于更新我自己没有制作的应用。

其中,有一个高度自定义的表视图,用于水平滚动图像,同时显示3个图像并启用分页。

问题是,有时它们看起来是白色的,我认为这是因为dequeueReusableCell在它们仍然可见时返回它们。 (因此表视图重用了那些因为仍然可见的单元格,不应该重复使用。)

由于该表中通常没有很多单元格,我尝试使用一种解决方法,即每次分配和初始化一个新单元格而不是将旧单元格出列,到目前为止它工作正常(对于一个小表格)。 / p>

然而,这不是一个好的解决方案,我想以“正确”的方式做到这一点。

我不知道如何判断是否应将单元格放回队列。

我应该怎么做才能阻止细胞排队等待重复使用?

1 个答案:

答案 0 :(得分:0)

如果您真的不想重复使用细胞,请按照您已经做过的方式进行。建议不要重复使用UITableViewCells。重用技术可以节省内存。

但是当tableView的内存价格不高时,就这样做吧。 方式不是“禁用”重用。

这听起来像是因为tableView旋转了90°以实现水平滚动。所以iOS认为滚动的单元格数量为x像素,并且必须位于屏幕外并且可以重复使用。这就是我的假设。

当你的更新解决iOS 6.0及更高版本时,我建议切换到UICollectionView,这与UITableView非常相似,但能够完全自定义流程布局(这是你要谷歌的术语)对)。

当我的推测是正确的时,另一个可能的解决方案可能是使用两个可重复使用的ID并交替它们,以便一个单元格获得足够的“空间”来滚动:

if([indexPath row] % 2 == 0) {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierOne];
}
else {
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifierTwo];
}

但是我真的如果我对这个猜测是正确的话,现在不要这样做:)