【问题标题】:I can make UINavigationController load only at 2nd level, not at Root View Controller我可以使 UINavigationController 仅在第二级加载,而不是在根视图控制器
【发布时间】:2011-09-07 09:01:08
【问题描述】:

我尝试寻找类似的问题,但找不到类似的问题。

我在 UIView 中加载 UINavigationController,它不是(在大多数示例中)MainWindow。

我创建了一个名为 DocumentsViewController 的新 .xib,它是 UIView 的子类(它具有相关的 .m 和 .h 文件)。我创建了一个DocumentsRootViewController.xib,它是UITableViewController的子类,应该是UINavigationController的RootViewController。

我移至 DocumentsViewController 并在 Interface Builder 中添加了一个 UINavigationController 对象。然后我去代码,像在 IBOutlet 中一样添加它,并将它连接到对象。

在 ViewDidLoad 中,我执行以下几行:

DocumentsRootViewController *rootViewController = [[[DocumentsRootViewController alloc] init] autorelease];
rootViewController.title = @"Documents";
[navigationControllerDocuments initWithRootViewController:rootViewController];
[self.view addSubview:navigationControllerDocuments.view];    

它按预期显示表格,但它显示“根视图控制器”的“返回”按钮(如下图所示)。

为什么?它不应该已经知道 rootviewcontroller 已经设置了吗?

提前感谢那些澄清这个疑问的人

乔瓦尼

【问题讨论】:

    标签: iphone ios uiviewcontroller uinavigationcontroller


    【解决方案1】:

    当您通过 Nib 添加 UINavigationController 时,它实际上会在 nib 文件中创建一个 UINavigationController 的实例,该实例具有默认的 RootViewController 集(UIViewController 类型)和默认标题为 RootViewController。

    当你加载 nib 时,这个对象是作为加载 nib 的一部分创建的(即当你初始化 DocumentsViewController 时) - 所以 navigationControllerDocuments 出口已经被初始化为 UINavigationController 并且已经设置了默认的 ViewController。

    我认为正在发生的事情是当您调用“initWithRootViewController”时-您在已经初始化的对象上调用它-因此它再次运行初始化代码-将第二个视图控制器(DocumentRootViewController)推入堆栈,但是在笔尖中创建的默认值已经存在。

    您可能应该做的是忘记在 nib 中创建一个并以编程方式初始化整个事物。

    即你在哪里做:

    [navigationControllerDocuments initWithRootViewController:rootViewController];
    

    我建议您改为使用 alloc 和 init:

    [[navigationControllerDocuments alloc] initWithRootViewController:rootViewController];
    

    既然你这样做了,你真的不需要将导航控制器添加到笔尖,所以如果这可行,你应该从笔尖中删除它,因为你在代码中用这个替换它。

    【讨论】:

    • 您的推理是正确的,感谢您的回答,我设法找到了正确的解决方案。我刚刚编辑了初始化行,因为它在 Xcode 中显示了一个警告,其中包含使我的项目正常工作的警告,并将答案标记为正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多