在 ViewController 之间导航的设计模式是啥?
Posted
技术标签:
【中文标题】在 ViewController 之间导航的设计模式是啥?【英文标题】:What is the design pattern for navigating between ViewControllers?在 ViewController 之间导航的设计模式是什么? 【发布时间】:2014-05-16 01:44:33 【问题描述】:我目前有 1 个故事板,其中包含 2 个视图控制器:ViewController 和 TableViewController。 ViewController 是登录视图,TableViewController 是显示结果的页面(结果视图)。
目前,我没有创建从登录视图到结果视图的转场。相反,在登录视图中,在用户按下登录按钮并通过身份验证后,我以编程方式推送到结果视图,如下所示。
XYZResultsTableViewController* controller = [[XYZResultsTableViewController alloc]init];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:controller animated:YES];
确实,结果视图显示,但左上角有一个“
所以,我的问题是:
如何从视图堆栈中删除登录视图? (因此结果视图上的后退按钮不显示) 这种在视图之间导航的“程序化”方式“不好”吗?意思是,我应该依赖故事板和转场吗?我应该导航到一个新的故事板吗(我已经在 SO 上看到过这个问题,虽然我还没有访问过它)?我是新人,所以非常感谢任何帮助。
【问题讨论】:
【参考方案1】:如果你不想使用导航堆栈,你必须使用 presentViewController 而不是 pushViewController
XYZResultsTableViewController* controller = [[XYZResultsTableViewController alloc]init];
[viewController1 presentViewController:controller animated:YES];//viewcontroller1 is current view controller
除非您想在要显示的 viewController 中显示 navigationController 堆栈,否则切勿使用下面的代码
/*XYZResultsTableViewController* controller = [[XYZResultsTableViewController alloc]init];
UINavigationController *navController = self.navigationController;
[navController popViewControllerAnimated:NO];
[navController pushViewController:controller animated:YES]; */
有关此difference between presentViewController and UINavigationController?的更多信息
http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html
【讨论】:
以上是关于在 ViewController 之间导航的设计模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章
向 UItableview 添加行并在 Viewcontroller 之间传递数据
在 TapBarController 内的 ViewController 和 NavigationController 之间传递值