加载不同的 Nib 文件
Posted
技术标签:
【中文标题】加载不同的 Nib 文件【英文标题】:Loading the Different Nib Files 【发布时间】:2011-06-08 14:31:28 【问题描述】:我为 iPhone 和 iPad 创建了两个 nib 文件,所以我的应用程序将是通用的。
我用这个方法来检查是不是iPad:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
但是当它知道它是哪个时,我不知道如何加载正确的笔尖。
有谁知道加载到 nib 文件的正确方法?
【问题讨论】:
加载一个nib文件究竟是做什么的?笔尖可用于许多事情。这些笔尖是否包含 UIViewController 的视图或其他对象图?您可以使用NSBundle
或UINib
类或UIViewController
的-initWithNibNamed:options:
方法加载笔尖。哪个合适取决于笔尖包含的内容以及您使用这些对象的目的。
【参考方案1】:
实际上,Apple 会自动执行所有这些操作,只需命名您的 NIB 文件即可:
MyViewController~iphone.xib // iPhone
MyViewController~ipad.xib // iPad
并用最少的代码加载您的视图控制器:
[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything
【讨论】:
【参考方案2】:你的接口文件应该命名不同,这样这样的东西应该可以工作。
UIViewController *someViewController = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
someViewController = [[UIViewController alloc] initWithNibName:@"SomeView_iPad" bundle:nil];
else
someViewController = [[UIViewController alloc] initWithNibName:@"SomeView" bundle:nil];
【讨论】:
【参考方案3】:您应该使用初始化程序-[UIViewController initWithNibNamed:bundle:];
。
在您的 SomeViewController.m 中:
- (id)init
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
if (nil != (self = [super initWithNibName:@"SomeViewControllerIPad"]))
[self setup];
else
if (nil != (self = [super initWithNibName:@"SomeViewControllerIPhone"]))
[self setup];
return self;
【讨论】:
以上是关于加载不同的 Nib 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上的一个 UITableView 中加载两个不同的 nib