在导航控制器之外停止 ViewController
Posted
技术标签:
【中文标题】在导航控制器之外停止 ViewController【英文标题】:Stop ViewController outside of navigation controller 【发布时间】:2015-10-05 17:24:30 【问题描述】:我是 ios 开发的新手,并且已经构建了一个基本应用程序来帮助自己熟悉约定。这是一个基本的游戏,流程如下:
主菜单 -> (modal) New Game Type -> (Push Segue) Game -> (modal) Game over -> (Push Segue) Main Menu
我的问题涉及从游戏/游戏回到主菜单。菜单是一个 ViewController,而游戏是一个单独的 ViewController,但没有嵌入到导航控制器中。
当我在游戏结束后将 Segue 返回到主菜单时,Game ViewController 会发生什么?由于它不是模式,我无法从主菜单 ViewController 中将其关闭,并且当用户开始另一个游戏时,Push Segue to the Game 是否会创建另一个?我应该停止(以及如何)完成的 Game ViewController?
我问是因为在调试时,在运行了几款游戏后,我看到了一个 UITranitionView 集合。我想确保我没有泄漏任何东西并正确处理过渡......
【问题讨论】:
【参考方案1】:如果您想使用正确的过渡,请使用 “主菜单 -> (modal) New Game Type -> (Push Segue) Game -> (modal) Game over -> (POP Segue to main View Controller)主菜单” 而不是使用 “主菜单 -> (modal) New Game Type -> (Push Segue) Game -> (modal) Game over -> (Push Segue) Main Menu”
【讨论】:
我的理解是,您描述的 POP segue 适用于嵌入在导航控制器中的视图控制器,但我的视图控制器都没有。他们应该是吗?这是公认的做法吗?【参考方案2】:对于像我一样对此感到困惑的任何人,这就是我最终要做的事情。
正如 Ankit 所提到的,pop segue 是要走的路,但你不能从不存在的导航堆栈中弹出 UIViewController。所以要解决这个问题,我必须将我的主视图控制器嵌入到 UINavigationController 中,然后将游戏和游戏通过 vc 推送到导航堆栈上。游戏结束后,我进行了一次放松的转场回到 Main vc。
主菜单 -> (Modal) New Game -> (PUSH) Game -> (PUSH)Game over -> (Unwind) Main
界面生成器中有一个选项可以隐藏 UINavigationController 上的导航栏,这就是我所做的。
底线:我使用的这个流程预设了一个导航堆栈,因此需要一个 UINavigationController。意识到这一点之后,事情变得更有意义了。
【讨论】:
以上是关于在导航控制器之外停止 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
目标 C:如何从当前 ViewController 后面的 ViewController 获取导航控制器