Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:显示其界面从xib文件加载并包含导航控制器的新视图_Ios_Uiviewcontroller_Uinavigationcontroller_Views_Rootview - Fatal编程技术网

iOS:显示其界面从xib文件加载并包含导航控制器的新视图

iOS:显示其界面从xib文件加载并包含导航控制器的新视图,ios,uiviewcontroller,uinavigationcontroller,views,rootview,Ios,Uiviewcontroller,Uinavigationcontroller,Views,Rootview,对于从XIB文件获取接口的视图的呈现,有一点我并不理解 我的应用程序的根视图控制器是一个UITabBarController。其中一个选项卡栏选项显示UINavigationController控制的视图。在该视图的导航栏上,我有一个加号(+)按钮用于添加新项目。我想将AddItem视图呈现为模式视图,它应该从AddItemView.xib文件获取接口。该XIB文件中有一个导航控制器 但是,导航栏不会出现。以下是单击加号按钮时调用的函数: - (void)showNewView:(UIViewC

对于从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,它下面又有一个子类UITABLEVIEWCOLLER,该子类又包含UITableView,它是点击选项卡栏中相应选项时在屏幕上看到的初始内容。所以我不确定为什么仅仅把这些东西放在IB中不会导致同样的事情发生


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

您介绍的视图控制器是vc,它是一个
附加视图控制器。仅仅在.xib文件中有一个导航控制器是不够的——您必须实际使用它。;-)

查看中的清单6-1,获取一个实现所需功能的方法示例。如果要使用.xib中已有的导航控制器,请为其制作一个插座并演示,而不是您当前演示的
AddItemViewController

所有这一切似乎都只适用于 选项卡栏,位于 MainWindow.xib文件。这个 UITabBarController有一个 它下面的UINavigationController 反过来又有一个子类 其下的UITableViewController,以及 它依次包含UITableView 这是最初的内容

MainWindow.xib中的所有对象都是同时加载的,并且已经相互连接。但是您没有将选项卡栏直接连接到表视图控制器,对吗?您已将其连接到导航控制器。当点击相应的选项卡时,选项卡栏控制器对表视图控制器一无所知——它只要求导航控制器提供其视图,然后导航控制器要求表视图控制器提供其视图,将其与导航视图分层(请参阅),并将结果返回到选项卡栏控制器

想象一下,如果将选项卡栏控制器直接连接到表视图控制器,会发生什么情况。这一次,选项卡栏控制器将直接与表视图控制器对话,因此当它要求该选项卡的视图控制器提供其视图时,它得到的只是表视图控制器的视图,即没有导航功能的表


模态视图控制器也会发生同样的情况。因为您展示的是AddItemViewController而不是导航控制器,所以AddItemViewController就是您的全部。

当然。实际上,我是在遛狗的时候,在阅读你的评论之前得出这个结论的。选项卡栏正在调用本身是导航视图控制器的视图控制器。在我的例子中,我的模态视图只是调用UIView,而不是导航控制器。谢谢。