【发布时间】:2016-01-08 21:54:59
【问题描述】:
我目前正在编写一个应用程序,我们将在用户第一次打开应用程序时启动演练。最后,我们要求用户填写一些详细信息,为此我希望他按一个按钮以重定向到设置页面。
问题是,此页面位于导航控制器的下一层(从登录页面开始)。就目前而言,我可以正确地实例化登录页面,但永远不会重定向到设置页面。
let mainView = self.storyboard?.instantiateViewControllerWithIdentifier("NavCtrl")
self.presentViewController(mainView!, animated: false, completion: nil)
// the above works correctly and sends us to the landing screen
// (rootView of the navigation controller)
// the following lines never have any effect though
let settingsView = self.storyboard?.instantiateViewControllerWithIdentifier("Settings View")
self.navigationController?.pushViewController(settingsView!, animated: false)
我认为这是因为我试图在故事板有时间启动第一个或第二个视图之前调用 .pushViewController。
所以我有几个问题:
- 有没有办法,确实,实例化一个视图,然后在它被实例化后立即导航到另一个视图? (这是为了保持导航堆栈并保持准确的导航栏行为)
- 如果没有,是否可以以编程方式填充导航堆栈,以便我只需要实例化设置视图?这是为了让导航栏中的后退按钮仍然可以发送到登陆屏幕?
提前谢谢大家
【问题讨论】:
-
当您执行
self.navigationController?.pushViewController(settingsView!, animated: false)时,您确定self.navigationController?不为零吗?主视图控制器未显示在导航堆栈上,而是以模态显示 -
在您的第一个视图控制器的 viewDidLoad 中,您可以将 self.performsegue... 添加到另一个视图
-
你执行了两次。 1ce 'presentViewController' 然后是 'self.navigationController?.pushViewController'。正如你所提到的,下面的 2 行永远不会被执行。您应该做的就是在您最初推送到的navigationController 的“viewDidLoad”中设置一个函数,该函数可以实例化到您希望它推送到的另一个VC。要拥有后退按钮,请将引导嵌入到 NavigationController 中。
-
@Charles-olivierDemers:不幸的是,我真的不能这样做,因为一旦您启动应用程序并完成了演练,默认情况下会显示登录页面。如果我这样做了,它会在您每次运行应用程序时导航到设置页面,这不是我想要的:p
-
@lukesIvi: cf 上面的评论 :)
标签: ios swift uiviewcontroller uinavigationcontroller