UIViewController 的 nibName 在 iPad 上为零,但在 iPhone 上不为零
Posted
技术标签:
【中文标题】UIViewController 的 nibName 在 iPad 上为零,但在 iPhone 上不为零【英文标题】:UIViewController's nibName is nill on iPad but not nill on iPhone 【发布时间】:2016-01-08 12:06:06 【问题描述】:我有一个视图控制器 LoginViewController
,其中包括一个 xib 文件 LoginViewController.xib
。我在代码中记录了控制器的 nibName。当我在 iPhone 模拟器上运行项目时,nibName 不是 nil,它是正确的 nib 名称,一切正常。但是当我在 iPad 上运行该项目时,nibName 为 nil。
初始化 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 上加载。
【问题讨论】:
显示你的 nib 文件名和你初始化这个 nib 的行。 您是否为两者使用不同的 XIB? @jay 我在 iPad 和 iPhone 上使用相同的 xib。 请分享您的代码。 请查看更新后的代码。 【参考方案1】:请尝试以下代码,并验证 Nib 名称:
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];
【讨论】:
但是没有 LoginViewController_iPad 文件。我必须创建两个 xib 吗? 是的,如果你想要 iPhone 和 iPad 的不同布局,如果没有区别,那么你可以只使用“LoginViewController”作为 nib 名称。 我不希望 iPhone 和 iPad 的布局不同。我只使用LoginViewController
作为笔尖名称。但问题是 nib 文件没有在 iPad 上加载。
@yong ho 私聊吧,,,
确保您的应用程序是通用的,然后为 iphone 使用相同的 nib 名称。然后与我分享你的结果。以上是关于UIViewController 的 nibName 在 iPad 上为零,但在 iPhone 上不为零的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用情节提要的情况下获取视图控制器的 NibName
在后台线程上创建 UIViewController 可以吗?
iPhone:TableViewController nibName 错误,带有“initWithNibName:bundle:”