iOS - 在 navigationController 上嵌入 viewController

Posted

技术标签:

【中文标题】iOS - 在 navigationController 上嵌入 viewController【英文标题】:iOS - embedding a viewController on a navigationController 【发布时间】:2012-11-06 15:07:54 【问题描述】:

我有 3 个视图控制器,vcAvcBvcC

我在vcA 并推送vcB。它有效。

当我尝试从vcB 推送vcC 时,它失败了。我看到vcBself.navigationController 属性是nil

阅读有关此属性的帮助文件,我看到:

如果视图控制器没有嵌入到导航控制器中,则此属性为零。

所以,vcB 可能不在导航控制器内部。

我的问题是,self.navigationController pushViewController:vcB ... 是否足以在导航控制器上嵌入vcB?如果没有,我如何在导航控制器上嵌入vcB

注意:vcA 是基于 Interface Builder 构建的,vcBvcC 是通过编程方式创建的。

【问题讨论】:

你能贴一些代码吗?从概念上讲,这听起来像是你做对了。我假设 vcA 最初是通过被推送到导航控制器的视图堆栈来显示的。 好的,但我的问题是:我在导航控制器上嵌入了 vcA,这是在界面生成器中完成的。现在,如何在导航控制器上嵌入第二个视图控制器 (vcB)?此 vcB 是在 vcA 内以编程方式创建的。 是的,您可以使用 pushViewController 方法推送其他控制器,但显示您的代码以查看问题所在。 你不是在 vcB 中创建一个名为 navigationController 的属性吗? 如果您确实找到了,请记得在此处发布您的修复,以便我们知道发生了什么。如果你找不到,我很乐意私下看看,如果你能分享的话。 【参考方案1】:

尝试以这种方式定义您的 viewController int:

在vcA中定义vcB

@property (nonatomic, strong) UIViewController *vcB;

@synthesize vcB = _vcB;

然后将其压入堆栈。

[self.navigationController pushViewController:self.vcB animated:YES];

在vcB中定义vcC

@property (nonatomic, strong) UIViewController *vcC;

@synthesize vcC = _vcC;

然后将其压入堆栈。

[self.navigationController pushViewController:self.vcC animated:YES];

【讨论】:

【参考方案2】:

3天后,我终于解决了这个问题。

这个问题是我的viewController 和navigationController 之一 连接到委托的rootViewController 插座。 感谢 Xcode 没有指出这一点!抱歉,我不得不再说一遍,我现在比以往任何时候都更讨厌 Xcode 4。

这个问题的解决方案与我遇到的另一个问题有关,可以在这里看到:https://***.com/a/13280574/316469

谢谢大家。

【讨论】:

以上是关于iOS - 在 navigationController 上嵌入 viewController的主要内容,如果未能解决你的问题,请参考以下文章

iOS: NavigationController: BarBackButtonItem 影响宽度

iOS7 NavigationController 右滑手势问题

IOS。如何在 .xib 中嵌入 NavigationController?

iOS:在 iPad 上创建 NavigationController 灯箱

当 navigationController 弹出时,iOS WKWebView 在 ios 8 和 ios 9 上崩溃

iOS6 中奇怪的 SplitView/NavigationController 行为