在 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 之间导航的设计模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮导航到root viewcontroller

iOS:视图控制器之间的导航

从一个 ViewController 导航到另一个

向 UItableview 添加行并在 Viewcontroller 之间传递数据

在 TapBarController 内的 ViewController 和 NavigationController 之间传递值

在屏幕之间导航