在不将其置于当前UINavigationController堆栈的情况下,为新视图创建segue的正确方法是什么?

时间:2012-12-05 16:30:46

标签: iphone ios xcode uistoryboard

我尝试使用有4个场景的故事板创建应用程序:

  • ChooseLoginMethod
  • EnterLoginData
  • SuccessfulLogin
  • MainScene。

我现在正在做的事情如下:我有一个UINavigationController,其中有ChooseLoginMethod作为其根视图。 ChooseLoginMethod有几个按钮(用于不同的登录方法),它们是推送到EnterLoginData的segue。 EnterLoginData对SuccesfullLogin有一个push segue,而SucessfullLogin对MainScene有一个推送segue。

问题是SuccessfulLogin和MainScene在顶栏上显示后退按钮,这对应用程序没有意义。

我试过了:

  • 隐藏这两个视图的顶部栏。没成功。
  • 将segue更改为模态。似乎工作,但感觉不是正确的事。

所以我想做的是创建一个segue,它打破了UINavigationController堆栈上的Views链。在故事板中有没有正确的方法呢?

- 编辑 -

也许我应该做的是替换根视图(Set root view for UINavigationController)。这可能有用,但似乎是编程工作,应该可以在故事板中完成。或者也许只是我没有采用" iOS方式做事和#34;。

2 个答案:

答案 0 :(得分:2)

在视频控制器出现在屏幕上之前,您必须使用setNavigationBarHidden,例如viewWillAppear

但是你不能从“MainScene”回到“RootController”。因此,您应该在“SuccessfulLogin”之后执行popToRootViewController之类的操作,然后弹出“MainScene”。

答案 1 :(得分:1)

我认为通常最好将主场景作为根视图控制器。从它的viewDidAppear方法,你可以模态地呈现你的ChooseLoginMethod控制器,并从那里进行模态转换到你的其他登录控制器。当你到达最后,并且想要回到主场景时,只需从根视图控制器中删除模态 - 这将取消第一个模式,以及从中呈现的任何模式:

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];