我的情况与iPhone上的Apple的mail.app非常相似,用户从列表中选择一个项目(UITableView
)以显示在详细视图中。用户可以在此视图中的项目之间导航,然后返回列表。
Mail.app修改列表上的选择并与详细信息视图保持同步,当用户返回列表时,详细视图的项目会正确突出显示而不是最初选择的项目。 Mail.app甚至滚动显示关于导航方向的righ项目,以便向上移动消息(向上箭头)使突出显示的列表项目出现在屏幕顶部,反之亦然。
现在,我的问题是,获得这种行为的最佳方法是什么?我知道如何使列表与详细信息视图保持同步。我不明白的是如何判断列表是否需要向上或向下滚动以进行新选择以及闪烁突出显示项目的正确方法是什么。如果没有必要,我不希望列表滚动。我可以计算出用户已经推进了多少项,但我不知道新项目是否会在屏幕上显示。
我目前正在实施的重点,以便表格视图选择没有动画的项目,然后在viewWillAppear:
中取消选择带动画的相同项目。
对此的任何指示都将受到高度赞赏。
答案 0 :(得分:1)
您可以询问表格视图是否有可见的单元格,例如向其发送cellForRowAtIndexPath:
消息并检查nil
的返回值。
要像Mail.app那样刷新项目,似乎你已经做了正确的事。
答案 1 :(得分:0)
您可以使用
-(void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition (UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
或
-(void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;
在viewWillAppear中:为了将您的tableview滚动到右侧单元格。
然后,项目的“闪烁”应该是
-(void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
答案 2 :(得分:0)
我认为您在UINavigationController
中,并且在从UITableView
选择内容时,您的“详细信息”视图会被推到最前面。
从详细信息视图返回时,系统会触发UITableViewController
的{{1}}。
在那里你应该使用viewWillAppear:
(参见Apple的文档http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITableView_Class/Reference/Reference.html)将所选项目滚动到视图中,并使用“scrollPosition”参数定义显示位置。
要知道在详情视图中导航时选择了哪个项目,您可以在应用委托中保存成员变量(简单,不是很优雅,但有效)。