弹出到初始视图控制器
Posted
技术标签:
【中文标题】弹出到初始视图控制器【英文标题】:Pop to initial view controller 【发布时间】:2014-01-29 22:33:44 【问题描述】:我目前正在编写一个使用嵌入式导航控制器的应用程序。我需要从嵌入式视图控制器中弹出到第一个视图控制器的初始视图。
这行代码只是将我返回到嵌入式导航控制器的初始视图:
[self.navigationController popToRootViewControllerAnimated:YES];
有什么想法吗?
【问题讨论】:
你能告诉你应用的层次结构以及你想在哪里弹出吗? 如果想通了。我刚刚更换了 [self.navigationController. popToRootViewControllerAnimated:YES]; with [self.navigationController.navigationController popToRootViewControllerAnimated:YES]; navigationController 的 UIViewController 属性返回“视图控制器层次结构中最近的祖先是导航控制器”。看来您有两个导航控制器,一个是另一个的子控制器。 【参考方案1】:你可以做一些这样的递归函数。将其命名为您喜欢的任何名称或为方便起见将其设为一个类别。
- (void)recursivePop:(UIViewController *)viewController
if (viewController.navigationController)
[viewController.navigationController popToRootViewControllerAnimated:YES];
[self recursivePop:viewController.navigationController];
然后在视图控制器中你想调用它,像这样调用它。
[self recursivePop:self];
【讨论】:
【参考方案2】:Swift 版本:
func recursivePop(controller: UIViewController?)
if let controller = controller
if let nav:UINavigationController = controller.navigationController
nav.popToRootViewControllerAnimated(true)
self.recursivePop(controller)
if let split:UISplitViewController = controller.splitViewController
if let nav:UINavigationController = split.navigationController
nav.popToRootViewControllerAnimated(true)
self.recursivePop(controller)
【讨论】:
认为这可以通过将 splitcontroller 部分的内部替换为 self.recursivePop(split) 来简化以上是关于弹出到初始视图控制器的主要内容,如果未能解决你的问题,请参考以下文章