假设您需要一些功能,需要下一个故事板。例如,根据单击的选项卡上传不同的内容来查看。
但是当您尝试使用此故事板时,问题就出现了。切换选项卡时会出现以下行为。
但在第一个选项卡中一切正常。看起来好像它没有第二次加载视图。有人可以解释或给出导航控制器在这种情况下的行为链接,因为我在参考资料中找不到任何有用的信息。或者我应该如何在IB或以编程方式更正此行为?
谢谢。
![storyboard](https://istack.dev59.com/n8NGo.webp)
![bad behaviour](https://istack.dev59.com/Cx3f4.webp)
谢谢。
一个简单的解决方法是将一个“假视图控制器”作为第二个导航的根视图控制器。在这个“假”控制器中,在viewDidLoad中执行[self performSegueWithIdentifier:@"goToTheControllerHereWeGo" sender:self];
所以,正如我在评论中提到的那样,我认为这是一个错误,但我们会看看苹果如何回应。但是,是的,segue 对于作为多个导航控制器的根视图控制器的视图控制器没有什么爱。根据出现的上下文,有许多解决方法。
最佳解决方法:共享导航控制器,而不是它们的根视图控制器
因此,对于上面给出的简单示例,您可以这样做,一切都会很好:
所以,在prepareForSegue中,您可以检查您的导航控制器是否已经解包了一个rootViewController,如果没有,则强制将其放入其中:
UINavigationController* nc = segue.destinationViewController ;
if (nc.viewControllers.count == 0) {
nc.viewControllers = @[[self.storyboard instantiateViewControllerWithIdentifier:@"MyDetailVC"]];
}
在“您不能将UIViewController作为两个不同导航控制器的根视图控制器”的注释旁边提供更多解释。假设您可以这样做,那么控制器的视图将成为两个导航控制器视图的子视图。这是不可能的,因为“它”不能同时是A的子级和B的子级。