是否可以阻止uitableviewcell在设备旋转时卸载?

时间:2014-01-05 00:33:54

标签: ios uitableview

编辑: 简而言之: 如何防止uitableview在旋转时调用cellForRowAtIndexPath?


我使用uitableview进行全屏模式。 在该模式下,每个单元格都是ipad屏幕的大小。 uitableview和单元格正在使用变换进行水平滚动。 uitableview设置为pagingEnabled = YES

当我旋转设备时,我布置所有帧/实体并调用

的BeginUpdate endUpdate

没有调用reloadData,这只会更新单元格高度。

在旋转开始之前,我保存当前可见单元格的索引路径 然后,在willAnimate..rotate..method中,我滚动到那个索引路径,这样用户就会看到正确的单元格。

问题出在某些情况下,特别是如果uitableview滚动条位于表格的中间,是uitableviewcell将卸载,而uitableview将加载不同的uitableviewcell。

我的问题是: 我想知道是否有什么东西要告诉uitableview不要"触摸"旋转时的单元格/重新加载/卸载。

我知道机会很低,但是我想知道其他人如何处理当前可见单元格有复杂界面+视频正在播放等情况,而你不想在旋转时停止活动,只需简单的方法即可。

希望我在这里清楚。

2 个答案:

答案 0 :(得分:0)

尝试将一个BOOL属性添加到名为isRotating的viewController中,并将isRotating设置为YES旋转时,在旋转结束时设置isRotating返回NO。 在CellForRowAtIndexPath中使用isRotating,将所有数据设置为重用的单元格,并将所有这些代码行放入if。

仅更改textLable文本的单元格的示例:

if (!isRotating)
{
    cell.textLable.text = @"newData";
}

这可能对你有用。

答案 1 :(得分:0)

我认为你不能阻止重复使用。您可以重复使用单元格的智能(例如,在旋转后恢复旋转/恢复之前保存单元格的内容)。正确定位:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)io
{
    [self saveContentOfCells:[self.tableView indexPathsOfVisibleCells]];
    self.lastVisible = [[self.tableView indexPathsOfVisibleCells] lastObject];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)io
{
    [self.tableView scrollToRowAtIndexPath:self.lastVisible atScrollPosition:UITableViewScrollPositionBottom];
}

- (UITableViewCell*)tableView:(UITableView*)tv cellForRowAtIndexPath:(NSIndexPath*)ip
{
    // dequeue cell
    // try to restore content if any, clear restoration info
    // if no restoration info setup cell
    // return cell
}