这是场景

创建新项目选项卡式应用程序。使用XIB文件添加新的控制器TestViewController,在XIB文件中只需添加一个带有文本“ TestViewControllerButton”的按钮即可。

如果我在FirstViewController中创建一个按钮,并添加一个要转到TestViewController的操作,则XIB文件中的按钮将被替换。

TestViewController* vc = [[TestViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];


问题是当我将TestViewController添加到选项卡控制器(索引2,从0开始)时,它没有显示XIB(我的意思是,按钮未显示)。

这是我的步骤。我在Tab Controller中添加UIViewController,然后在Identity Inspector中将类更改为TestViewController。然后将Tab Bar Item添加到TestViewController并将其链接到Tab Bar Controller,这样,当单击最后一个选项卡时,它将链接到TestViewController。但是问题是,XIB中的按钮没有显示(我在TestViewController.xib中添加了按钮)。

是的,当然,我可以直接在TestViewController的Main.storyboard中添加按钮,但是我的想法是我想在TestViewController XIB中管理UI,而main.storyboard只是将视图加载到TestViewController图像中。

好的,我添加一些屏幕截图以使理解。当我以编程方式进行操作时,此屏幕运行良好,并在UIViewController中运行(上面的代码-self presentViewController:vc动画:是完成:无)。



当我从Tab运行时



我认为该设置已经正确(因为它在UIViewController中运行良好)



已经将文件所有者设置为TestViewController



已经绑定出口



谢谢!

最佳答案

当然,它不会显示控件。看,您正在这些地方使用两个不同的视图控制器。在xib中,您实际上已经添加了按钮,因此从xib创建testViewController的实例时,它具有按钮及其关联的操作。但是,在情节提要中添加viewController并将其类设置为TestViewController的情况下,您要做的就是将新view controller的类类型设置为TestViewController。但是,您没有提供任何信息,情节提要可以通过该信息得知必须由其XIB中保存的图像创建testViewController的新实例。因此,它只是使用情节提要中的图像(没有按钮)来创建一个TestViewController类型的新视图控制器。

因此,要从xib获取视图控制器,您将必须重写initWithCoder:实现内的TestViewController方法,并从XIB返回viewController的实例。就像是:

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
  return [self initWithNibName:nil bundle:nil];
}

关于ios - 单击选项卡时,选项卡栏 Controller 不会显示XIB UIViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30011396/

10-10 20:28