UIViewController的nibName在iPad上是nill,但在iPhone上不是nill

时间:2016-01-08 12:06:06

标签: ios objective-c iphone ipad

我有一个视图控制器LoginViewController,其中包含一个xib文件LoginViewController.xib。我在代码中记录控制器的nibName。当我在iPhone模拟器上运行项目时,nibName不是nil,它是正确的nib名称,一切正常。但是当我在iPad上运行项目时,nibName是零。

init LoginViewController的代码是。控制器和nib文件位于框架中。

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"FavorLibraryResources" withExtension:@"bundle"]];
LoginViewController *controller = [[LoginViewController alloc] initWithNibName:NSStringFromClass([LoginViewController class]) bundle:bundle];

我发现了问题,我打开了FavorLibraryResources.bundle,其中有一个LoginViewController~iphone.xib文件。但是xib名称是LoginViewController.xib。似乎xcode会自动将~iphone添加到文件名中。但它不会生成~ipad版本的xib。所以这个xib没有在iPad上加载。

1 个答案:

答案 0 :(得分:0)

请尝试以下代码,并验证笔尖名称:

NSString * nibName = @"LoginViewController";

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
   nibName = @"LoginViewController_iPad";

NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"FavorLibraryResources" withExtension:@"bundle"]];
LoginViewController *controller = [[LoginViewController alloc] initWithNibName:nibName bundle:bundle];