编辑: 简而言之: 如何防止uitableview在旋转时调用cellForRowAtIndexPath?
我使用uitableview进行全屏模式。 在该模式下,每个单元格都是ipad屏幕的大小。 uitableview和单元格正在使用变换进行水平滚动。 uitableview设置为pagingEnabled = YES
当我旋转设备时,我布置所有帧/实体并调用
的BeginUpdate endUpdate
没有调用reloadData,这只会更新单元格高度。
在旋转开始之前,我保存当前可见单元格的索引路径 然后,在willAnimate..rotate..method中,我滚动到那个索引路径,这样用户就会看到正确的单元格。
问题出在某些情况下,特别是如果uitableview滚动条位于表格的中间,是uitableviewcell将卸载,而uitableview将加载不同的uitableviewcell。
我的问题是: 我想知道是否有什么东西要告诉uitableview不要"触摸"旋转时的单元格/重新加载/卸载。
我知道机会很低,但是我想知道其他人如何处理当前可见单元格有复杂界面+视频正在播放等情况,而你不想在旋转时停止活动,只需简单的方法即可。
希望我在这里清楚。答案 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
}