在我的StoryBoard中,我将根视图控制器嵌入到导航控制器中,并在启动应用程序时显示此视图。然后,用户将浏览一系列视图,这些视图基本上是以模态方式呈现的视图控制器。
我正在尝试实现一个函数来返回根视图控制器,所以我调用了
-(IBAction)backToMenu{
NSLog(@"Back to menu");
[self.navigationController popToRootViewControllerAnimated:YES];
}
但没有任何反应。如果我NSLog(@"%@", self.navigationController");
它会打印null
,所以我猜这是我问题的根源。您无法在以模态方式呈现的视图控制器上调用popToRootViewControllerAnimated:
。
除非您将引用传递给根视图控制器。但这是正确的方法吗?如果是这样,您如何传递对根视图控制器的引用?由于我的所有视图控制器都是UIViewController
的自定义子类的实例,我尝试在所述类的代码中插入它:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[[segue destinationViewController] navigationController] = [[segue sourceViewController] navigationController];
}
但我收到一条错误消息,指出navigationController
无法转让。
有什么想法吗?
答案 0 :(得分:0)
在dismissViewControllerAnimated:completion:
的文档中,它说:
如果你连续出现几个视图控制器,那么建立一个 堆栈的呈现视图控制器,在视图上调用此方法 堆栈中较低的控制器会解除其直接的子视图 控制器和堆栈上该子节点上方的所有视图控制器。
这表明您应该保留对根视图控制器的引用(或以其他方式通知它)并在其上调用此方法。 (如果你正在使用它,那么已弃用的dismissModalViewControllerAnimated:
也有类似的说明。)
答案 1 :(得分:0)
实现方法-(IBAction)backToMenu
的类是否继承自UIViewController?当我实现popToRootViewControllerAnimated的类继承自其他类时,我得到了错误。要保持对原始navigatorController的引用,我会:
在实现backToMenu的类中声明一个指向导航控制器指针的指针,类似于:UINavigationController *navCon;
yo应该将其声明为属性,然后 synthesizeit 。
因此,当您为此类实例化ViewController时,您可以执行以下操作:
TheClassViewController *theClassVC = [TheClassViewController alloc] initWithNib:@"TheClassViewController" bundle:nil];
theClassVC.navCon = self.navigationController;
//这是您传递参考资料的地方
[self.navigationController pushViewController:theClassVC animated:YES];
答案 2 :(得分:0)
刚刚解决了。
问题是,在StoryBoard中,初始视图控制器是嵌入的根视图控制器而不是导航控制器!
一旦将导航控制器设置为初始视图控制器(即拖动箭头使其指向它),popToRootViewControllerAnimated
就像魅力一样。