这是场景
创建新项目选项卡式应用程序。使用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/