【发布时间】:2015-01-03 02:58:08
【问题描述】:
我正在开发一个作为第一个视图控制器具有 UIViewController 的应用程序。 此控制器推送包含其他控制器的 NavigationViewController。 现在我需要弹出 NavigationController 的 RootViewController 以回到最初的 UIViewController。 我试过了
[self dismissViewControllerAnimated:YES completion:nil];
应用程序崩溃(“Tread1:EXC_BAD_ACCESS(code=1, address= ......)”)。 我试过了
[self.navigationController popViewControllerAnimated:YES];
什么都没有发生。
初始 UIViewController 调用
[self performSegueWithIdentifier:@"MyIdentifier" sender:self];
在 UIBuilder 中,segue 的类型是“Show(e.g. Push)”
然后我有一个 NavigationViewcontroller,其中包含 RootViewController 和另一个 Viewcontroller。 我想要实现的是从 RootViewController 返回到第一个 viewcontroller(navigationcontroller 之外的那个)。所以我应该在那里有导航控制器。
我错过了什么?
【问题讨论】:
-
什么也没发生的原因是
self,不管是谁,都没有navigationController。您正在与错误的视图控制器交谈。这里的问题是您需要以良好的顺序展开视图控制器的整个“堆栈”;您可能需要多个命令...不幸的是,您的问题并未描述您实际的全套视图控制器,因此无法提供任何进一步的帮助。 -
我认为您需要查看您的视图控制器层次结构。 UIViewController 如何在没有自己的导航控制器的情况下“推动” UINavigationController?您最好将 UINavigationController 显示为模态控制器。
-
你可以试试,[self.navigationController popToRootViewControllerAnimated:YES];
-
你能告诉我你是如何推动导航控制器的吗?当尝试这样的事情时:[self.navigationController pushViewController:testNavigationController animated:NO] 它会抛出这个异常“不支持推送导航控制器”。
-
只有当你的初始 UIViewController 在导航控制器中时才可以推送视图控制器。在这种情况下,您已将导航控制器推送到另一个导航控制器的视图层次结构中。因此,您调用 self.navigationController.navigationController 来访问主导航控制器。尝试使用 [self.navigationController.navigationController popToRootViewControllerAnimated:YES]
标签: ios objective-c uinavigationcontroller