3

关于呈现从 XIB 文件获取其界面的视图,有一些基本的东西我不理解。

我的应用程序的根视图控制器是一个 UITabBarController。选项卡栏选项之一呈现 UINavigationController 控制的视图。在该视图的导航栏中,我有一个用于添加新项目的加号 (+) 按钮。我想将 AddItem 视图呈现为模式视图,它应该从 AddItemView.xib 文件中获取其接口。该 XIB 文件中有一个导航控制器。

但是,导航栏不会出现。这是单击加号按钮时调用的函数:

- (void)showNewView:(UIViewController *)viewController
{
    AddItemViewController *vc = [[AddItemViewController alloc] initWithNibName:@"AddItemViewController" bundle:nil];

//viewController is the UIViewController on which the plus button was tapped
    [viewController.navigationController presentModalViewController:vc animated:NO];
}

我得到的只是一个白屏。我需要在 viewDidLoad 中为 AddItemViewController 做些什么吗?我是否需要将某些东西连接到 XIB 中的 UINavigationController 实例?

所有这些似乎只适用于 MainWindow.xib 文件中的选项卡栏。UITabBarController 在它下面有一个 UINavigationController,它又在它下面有一个 UITableViewController 的子类,它又包含 UITableView,这是您在点击选项卡栏中的相应选项时在屏幕上看到的初始内容。所以我不确定为什么仅仅将这些东西放在 IB 中不会导致同样的事情发生。

正如我一开始所说,我确信这个问题源于对 XIB 文件、它们的视图控制器和调用它们的视图控制器之间的关系的根本误解。因此,虽然我确实想解决这个特定问题,但我希望得到一个可以解决这种更广泛误解的答案。

4

1 回答 1

3

您展示的视图控制器是 vc,它是一个AddItemViewController. .xib 文件中只有一个导航控制器是不够的——您必须实际使用它。;-)

查看以模态方式呈现视图控制器中的清单 6-1,以了解一种实现您想要的方式的示例。如果您想使用 .xib 中已经存在的导航控制器,请为其创建一个出口并展示它,而不是AddItemViewController您当前展示的那个。

所有这些似乎只适用于 MainWindow.xib 文件中的选项卡栏。那里的 UITabBarController 在它下面有一个 UINavigationController,它又在它下面有一个 UITableViewController 的子类,而它又包含作为初始内容的 UITableView...

MainWindow.xib 中的所有这些对象都是同时加载的,并且已经相互连接。但是您没有将标签栏直接连接到表格视图控制器,对吧?您已将其连接到导航控制器。当相应的选项卡被点击时,选项卡栏控制器对表格视图控制器一无所知——它只是向导航控制器询问其视图,然后导航控制器向表格视图控制器询问视图,层使用导航视图(请参阅导航界面剖析)并将结果返回到选项卡栏控制器。

想象一下,如果您确实将标签栏控制器直接连接到表格视图控制器会发生什么。这一次,标签栏控制器将直接与表视图控制器对话,因此当它向该标签的视图控制器询问其视图时,它得到的只是表视图控制器的视图,即没有导航功能的表。

您的模态视图控制器也发生了同样的事情。由于您展示的是 AddItemViewController 而不是导航控制器,因此您只需要 AddItemViewController。

于 2011-07-03T00:46:27.907 回答