当 UINavigationController 通过 Storyboard 模态呈现时,它的 rootViewController 与它没有连接

Posted

技术标签:

【中文标题】当 UINavigationController 通过 Storyboard 模态呈现时,它的 rootViewController 与它没有连接【英文标题】:When UINavigationController is modally presented via Storyboards, it's rootViewController has no connection to it 【发布时间】:2012-09-18 07:38:04 【问题描述】:

我的故事板如下所示:

第一部分工作完美,问题是当我使用“测试模式”按钮模态显示第二个 NavigationController 时,它已正确设置为具有 rootViewController - 没有建立连接。

意思是,我知道 UINavigationController 在那里(从 UIWindow 的 rootViewController 开始查询所有控制器),并且我的控制器也已加载,但 navigationController 为 nil,parentViewController 为 nil - 我没办法可以访问 UINavigationController(因此无法自定义顶部工具栏)

如果我检查第二个 UINavigationController 上的“是初始视图控制器”,它可以工作(但显然这不是我想要的)。我相信这可能是一个 UIKit 错误。还是我做错了?

【问题讨论】:

嗨,我是一名 ios 初学者,但我在 Twitter 上回复了你,因为这听起来像是我在我的应用程序中所做的事情。我检查了您的用例,您是对的,第二个导航控制器 navigationController 为空。但我认为这是故意的,因为它本身就是一个导航控制器。如果它有它的导航控制器,则意味着它包含在另一个导航控制器中,因此有两个工具栏。 但是在我复制的用例中,self.navigationBar 已经准备好进行自定义了。 当我推送 UINavigationController 时,我推送的是 rootViewController,而这只是被包裹起来。所以我当然会尝试在我的 viewController 中访问 navigationController,而不是在 UINavigationController 中。 self.navigationController 中的红色在我的复制中正确设置为绿色:dl.dropbox.com/u/115935/viewcontroller.png 我在我的机器上复制了用例并上传了项目:t.co/V1qv33z。当我进入模态导航控制器时,它会正确记录“”。 【参考方案1】:

是否正确实现了您的 prepareForSegue 方法? 这就是我在应用中实现 prepareForSegue 方法的方式。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

if([segue.identifier isEqualToString:@"yourConnectionName"]) 
UINavigationController *navController = segue.destinationController;
YourViewControllerClass *controller = (YourViewControllerClass *)navController.topViewController;
controller.delegate = self;


【讨论】:

我没有委托,所以根本不需要 prepareForSegue。它有效,只是不是模态的。 是属性“根视图控制器”设置为新的“视图控制器”和属性“模态”到你的按钮“测试模态”。检查您的导航控制器的连接检查器。 是的。我怀疑这很可能是我的控制器中的某些东西。我已经向 Apple 提交了 DTS。 好的奇怪错误。请发布您的解决方案,如果有的话。【参考方案2】:

我终于找到了这个。

我没有在我的初始化中调用[super initWithCoder:decoder]。这导致一些 UIViewController 变量未初始化。更改后它就像一个魅力。

【讨论】:

以上是关于当 UINavigationController 通过 Storyboard 模态呈现时,它的 rootViewController 与它没有连接的主要内容,如果未能解决你的问题,请参考以下文章

当 rootViewController 不是 UINavigationController 时推送视图

当 UIViewController 模态显示时,UINavigationController(在 UITabBarController 选项卡内)丢失堆栈

UIRefreshControl - 当 UITableViewController 在 UINavigationController 中时,beginRefreshing 不起作用

当 UITextField 在 modalView 中有第一响应者时,UINavigationController 堆栈错误

当应用程序 rootViewController 是 tabBarController 时 UINavigationController 的奇怪行为

当 UISplitViewController 旋转为纵向时,如何调整 UINavigationController 内容的大小