切换到 UITableView 控制器并滚动到部分的开头
Posted
技术标签:
【中文标题】切换到 UITableView 控制器并滚动到部分的开头【英文标题】:Switch to UITableView controller and scroll to start of section 【发布时间】:2009-10-02 13:57:05 【问题描述】:早安,
我希望有人能够阐明如何从嵌套在标签栏控制器中的 ViewController 切换到嵌套在嵌套在标签栏控制器中的导航控制器中的另一个 ViewController,然后滚动表格视图在部分导航控制器中到特定部分。
我至少找到了切换标签栏控制器所需的内容
[self.applicationTabBarController setSelectedIndex:1];
我可以通过
获得对第二个视图控制器的引用UINavigationController *secondTabNavController = (UINavigationController *)[[self.applicationTabBarController viewControllers] objectAtIndex:1];
MyViewController *myViewController = (MyViewController *)[[ordersNav viewControllers] objectAtIndex:0];
但我不清楚如何将 UITableView 滚动到特定部分。我试过了
NSIndexPath *myPath = [NSIndexPath indexPathForRow:0 inSection:3];
[myViewController.ordersTableView scrollToRowAtIndexPath:myPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
当然,假设第二个视图已经加载,并且有第 3 节。
最后,我的第一个视图控制器调用驻留在应用程序委托中的上述代码。
谢谢。
【问题讨论】:
【参考方案1】:您需要小心将scrollToRowAtIndexPath
调用的位置。如果您在视图加载之前放置它,它可能会在 nil 上运行该方法。我想说在myViewController
中有一个名为scrollToRowAtIndexPath:
的函数,它确定当前是否显示视图,如果是,只需调用tableView 版本。如果没有,保存 indexPath 直到调用 viewWillAppear:
然后运行它。
【讨论】:
埃德,感谢您的回复。当 tableview 至少加载了一次数据时,我能够让 tableview 滚动到它的位置。然而,我对第二部分有点难过。如果从未加载过 tableview,我将滚动推迟到稍后的时间,在这种情况下 viewWillAppear。似乎在 viewWillAppear 和 viewDidAppear 中,表格尚未加载,因此无法滚动到该位置。当表格视图完成请求数据时是否会触发事件?谢谢, 在回应我自己的评论时,我注意到在 viewWillAppear 上,tableview 没有加载并且可以滚动到位置。但是,在该方法中,如果我在表格上调用 reloadData,表格视图将滚动到正确的索引。我不相信这是实现我的目标的正确方法。但它奏效了。以上是关于切换到 UITableView 控制器并滚动到部分的开头的主要内容,如果未能解决你的问题,请参考以下文章
如何滚动uitableview和顶部的部分标题,可见并滚动到
滚动并返回到 UITableView 中的部分关闭(包含 0 个单元格)