我有一个主要的UITableView,当按下它时它转到另一个UITableView,当按下一个单元格时,它会进入该单元格的DetailView。
我希望中间UITableView的行为不同,具体取决于是否弹出了detailView或UITableView本身是否被推送。如果视图从主表推进,我想滚动到顶部,如果在DetailView弹出后显示,我希望它保持在同一位置。
有什么建议吗?
答案 0 :(得分:2)
在将它推送到navigationController后,可以在DetailViewController上调用scrollToTop方法。
类似的东西:
if (!detailViewController) {
detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
}
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController scrollToTop];
// or use the tableView directly:
// [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
答案 1 :(得分:1)
在中间视图控制器中,直接从UINavigationController堆栈检查哪个视图是下一个显示的:
- (void)viewWillDisappear:(BOOL)animated
{
if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) {
// Detail view has been pushed onto the UINavigationController stack
}
else {
// Middle view has been popped from the UINavigationController stack
}
}
答案 2 :(得分:0)
在你的中间UIViewController属性上创建一个名为@property
或类似东西的BOOL wasPushed
,当你从UIViewController 1初始化它时,在新实例上设置属性,将其推送到导航堆栈,然后,您可以在中视图控制器的loadView
,viewDidLoad
,viewWill/DidAppear
方法中使用您的属性。
一旦你使用它,将它设置回FALSE或NO(或其他),当你最终回到它时,由于弹出你的第三个视图控制器,你将把它设为FALSE / NO您的loadView
,viewDidLoad
等方法。