iPad:在屏幕上保留选定的表格视图单元格
Posted
技术标签:
【中文标题】iPad:在屏幕上保留选定的表格视图单元格【英文标题】:iPad: Keeping a selected table view cell on screen 【发布时间】:2011-06-18 13:13:12 【问题描述】:在 iPad 上,当用户选择 UITableView
中的单元格时,我会显示 UIPopover
。单元格保持选中状态,直到弹出框消失。
当用户将设备从纵向旋转到横向并且所选单元格位于屏幕下方时,旋转后它将消失,并且弹出框最终指向另一个(无关紧要的)单元格。
如何确保UITableView
中的选定单元格在从纵向旋转到横向时保持在屏幕上?
更新:结合 Caleb 和 kviksilver 的代码,以下是一个可行的解决方案:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
CGRect activeCellRect = [self.tableView rectForRowAtIndexPath:self.indexPath];
if ((activeCellRect.origin.y + activeCellRect.size.height) >
(self.view.frame.origin.y + self.view.frame.size.height))
// If a row ends up off screen after a rotation, bring it back
// on screen.
[self.tableView scrollToRowAtIndexPath:self.indexPath
atScrollPosition:UITableViewScrollPositionBottom
animated:YES];
更新 2,关于重新定位 UIPopover
: 在滚动命令之后,需要向表格视图发送 reloadData
消息。然后rectForRowAtIndexPath:
方法将正确报告单元格的新位置(否则它不会,因为它在滚动命令后没有正确更新)!
【问题讨论】:
【参考方案1】:在方向更改时尝试检查 indexPathsForVisibleRows 以查看您的单元格是否可见,如果不可见则使用 scrollToRowAtIndexPath .. 类似:
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
if (![[self.tableView indexPathsForVisibleRows] containsObject:[self.tableView indexPathForSelectedRow]])
[self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForSelectedRow] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
【讨论】:
感谢您的代码,但仍然存在问题:[self.tableView indexPathsForVisibleRows]
在旋转后不返回行数组的“缩小”大小。不过,Caleb 建议使用 -rectForRowAtIndexPath:
方法确实有效。【参考方案2】:
您已经知道选择了哪一行,对吧?您还知道设备方向何时更改,或者至少您可以知道,因为有 UIViewController 方法可以做到这一点。您可以使用 UITableView 的 -rectForRowAtIndexPath:
方法获取选定行的矩形,并且使用 UITableView 继承的 UIScrollView 的 -scrollRectToVisible:animated:
方法很容易确保矩形保持可见。
【讨论】:
继 kviksilver 的方法之后,还有一个-scrollToNearestSelectedRowAtScrollPosition:animated:
听起来就像我在一个步骤中描述的大部分内容一样。
我完全忘记了 scrollToNearestSelectedRowAtScrollPosition :-D
@kviksilver,我完全忘记了-scrollToRowAtIndexPath...
,直到你提到它。团队合作。 ;-)以上是关于iPad:在屏幕上保留选定的表格视图单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何在另一个视图控制器上向 UInavigationcontroller 显示完整的选定表格单元格