与具有两个UINavigationControllers的rootViewController共享相同的UIViewController

Bil*_*oga 14 uitabbarcontroller uiviewcontroller uinavigationcontroller ios uistoryboard

更新:我已决定针对我的问题采取不同的路线.我没有尝试直接重用相同的UIViewController,而是使用两个设置为rootViewControllers的 vanilla UIViewControllers.在他们的loadView方法中,他们调用获取前UIViewController并将其视图设置为控制器的视图.这可能是首选的方法,因为我需要设置几个变量和委托.[storyboard instantiateViewControllerWithIdentifier:]

我有一个带有UITabBarControllerUIStoryBoard作为与两个UINavigationControllers连接的入口点.每个人共享一个共同的UIViewController作为他们的根视图控制器.应用程序启动时,将选择第一个UITabBarItem,并按预期加载视图.但是,当我选择第二个UITabBarItem时,同一视图不可见.我看到UINavigationBar有黑色背景.我在使用Storyboard界面做错了什么,或者我是否需要通过每个UINavigationController的方法手动实例化UIViewController - 例如loadView?

Iva*_*hez 10

奇怪的是,这是一个没有人问的问题.据我所知,不可能共享rootViewController我认为毫无疑问是一个bug,因为当你检查故事板上的连接时,你可以看到视图控制器连接到两个导航控制器.我认为这是故事板中的一个缺陷,因为复制viewControllers并重新应用它们的所有连接非常容易出错并且使故事板过于复杂.

我看到了你解决问题的方法.这样的解决方法让我怀疑iOS中的当前故事板功能是否已准备好创建应用程序.我认为故事板存在概念性问题,Apple需要决定故事板上的viewController是否代表一个实例,或者它是否只代表类,现在它不一致,因为你可以看到多个segues实际上可以指向相同的viewController,但实际上每个segue都有自己的实例,为什么这个也没有跟随rootViewController连接?,我不知道.

请注意,使用您的解决方案时,请考虑Apple的文档中的以下内容:

"重要信息视图控制器是其视图及其创建的任何子视图的唯一所有者.它负责创建这些视图并在适当的时间放弃它们的所有权,包括在内存不足的情况下以及视图控制器本身被释放时如果使用故事板或nib文件来存储视图对象,则每个视图控制器对象在视图控制器要求时自动获取这些视图的副本.但是,如果手动创建视图,则不应使用具有多个视图控制器的相同视图对象."

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html