gpt4 book ai didi

iphone - UINavigationController NIB 要求文件所有者拥有 View ?

转载 作者:行者123 更新时间:2023-12-03 18:45:03 25 4
gpt4 key购买 nike

我在界面生成器中设置 View Controller Nib 的默认 View socket 时遇到问题。这是我的设置:

我有一个基于 TabBar 的应用程序,我将导航 Controller 加载为模态视图...

MyNavCtrlrSubClass *menu = [[MyNavCtrlrSubClass alloc]initWithNibName:@"MenuController" bundle:nil];
[tabBarController presentModalViewController:menu animated:anim];

MenuController本身的结构如下:

MenuController.xib  File's Owner (MyNavCtrlrSubClass : UIViewController)  Navigation Controller (UINavigationController)    Navigation Bar (UINavigationBar)    Root View Controller (Nib Name is set to load AnotherViewController.nib)      Navigation Item -> (UINavigationItem)

这一切都工作正常,除了加载 MyNavCtrlrSubClass 时,我收到以下错误:

Loaded the "MenuController" nib but the view outlet was not set

很明显为什么会发生这种情况 - 文件所有者没有其 View 的 socket 连接。 问题是我应该将什么设置为其 View ,并且首先必须设置某些内容吗?导航栏是 MenuController.xib 中唯一的候选者,但这样做只会调整 UINavigationBar 的大小可以这么说,它本身就是全屏模式。

我显然在 IB 中遗漏了一些东西,但是什么呢? MyNavCtrlrSubClass.m 本身没有代码,除了 UINavigationController 的 IBOutlet 之外。我尝试将其完全设置在 IB 中是否犯了错误?这个想法是将模态导航 Controller 保留在一个 Nib 中,并将其加载的所有 View 放在单独的 Nib 中,但由于 MenuController 只是导航的容器并且本身不包含 View ,因此我显然设计错误。 :)

如果你想知道为什么我不以其他方式设计它,那是因为我试图遵循我对 IB 如何要求你建立理想层次结构的看法(可能是错误的)。

任何帮助将不胜感激。

最佳答案

我认为您可能不理解文件所有者是如何在 NIB 文件中使用的。我已经写了一个响应来描述文件的所有者 under another question .

当您调用此行时:

[[MyNavCtrlrSubClass alloc] initWithNibName:@"MenuController" bundle:nil]

您创建 MyNavCtrlrSubClass 的实例,并告诉它加载@“MenuController”。然后在 MenuController.xib 文件中,有第二个不相关的 UINavigationController,其中包含一些内容。当 MenuController.nib 在运行时加载时,将创建第二个导航 Controller 。

第二个问题是告诉 UINavigationController 加载 NIB 文件实际上并不明智,因为导航 Controller 创建并管理自己的 View 。您确实想要创建 Root View Controller ,并告诉该 View Controller 加载 NIB 文件。

试试这个:

MyRootViewController *rootController = [[[MyRootViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil] autorelease];
MyNavCtrlrSubClass *menu = [[MyNavCtrlrSubClass alloc] initWithRootViewController:rootController];

您的 XIB 文件如下所示:

  • 文件的所有者(类设置为MyRootViewController, View socket 连接到后续的UIView)
  • UI View
    • subview A
    • subview B

在您熟悉所有这些工作方式后,您还可以考虑在一个 XIB 文件中实例化导航 Controller 和 Root View Controller ,就像您在发布的代码中开始执行的操作一样。

关于iphone - UINavigationController NIB 要求文件所有者拥有 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/940952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com