iOS:呈现新视图,其界面从xib文件加载并包含导航控制器

时间:2011-07-02 19:45:39

标签: ios uiviewcontroller uinavigationcontroller views rootview

有一些基本的东西,我不了解如何呈现从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文件,视图控制器和调用它们的视图控制器之间关系的基本误解。因此,虽然我确实希望解决这一特定问题,但我希望能够解决这一更广泛的误解。

1 个答案:

答案 0 :(得分:3)

您要呈现的视图控制器是vc,它是AddItemViewController。在.xib文件中有一个导航控制器是不够的 - 你必须实际使用它。 ; - )

查看Presenting a View Controller Modally中的清单6-1,了解一种实现所需方法的示例。如果您想使用已经存在于.xib中的导航控制器,请为其创建一个插座并显示它而不是您当前提供的AddItemViewController

  

所有这些似乎都适用于   标签栏,位于   MainWindow.xib文件。该   UITabBarController有一个   它下面的UINavigationController   反过来有一个子类   在它下面的UITableViewController,和   而这又包含UITableView   这是最初的内容...

MainWindow.xib中的所有这些对象同时加载并已相互连接。但是你没有将标签栏直接连接到表视图控制器,对吧?您已将其连接到导航控制器。当点击相应的选项卡时,标签栏控制器不知道关于表视图控制器的事情 - 它只是询问导航控制器的视图,然后导航控制器要求表视图控制器其< / em> view,使用导航视图对其进行分层(请参阅Anatomy of a Navigation Interface)并将结果返回到标签栏控制器。

想象一下如果 将标签栏控制器直接连接到表视图控制器会发生什么。这一次,标签栏控制器将直接与表视图控制器通信,因此当它要求该选项卡的视图控制器查看其视图时,所有它返回的是表视图控制器的视图,即表,没有导航功能。 / p>

您的模态视图控制器也会发生同样的事情。由于您正在展示AddItemViewController而不是导航控制器,因此您可以获得AddItemViewController。