我为iPhone和iPad创建了两个笔尖文件,所以我的应用程序将是通用的。加载不同的笔尖文件
我用这个方法来检查它是否是一个iPad:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
,但我不知道如何当它知道它是加载正确的笔尖。
有谁知道加载到nib文件的正确方法吗?
我为iPhone和iPad创建了两个笔尖文件,所以我的应用程序将是通用的。加载不同的笔尖文件
我用这个方法来检查它是否是一个iPad:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
,但我不知道如何当它知道它是加载正确的笔尖。
有谁知道加载到nib文件的正确方法吗?
你的界面文件应该有不同的命名,所以应该这样。
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];
}
您应该使用初始化程序-[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文件:
MyViewController~iphone.xib // iPhone
MyViewController~ipad.xib // iPad
,并用代码量最小加载您的视图控制器:
[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything
这是正确的,不介意倒票;)+1 – Joe 2014-07-01 13:56:14
加载一个nib文件来做什么?笔尖可以用于很多事情。这些笔尖是否包含UIViewController的视图或其他对象图?您可以使用'NSBundle'或'UINib'类或'UIViewController'''-initWithNibNamed:options:'方法加载一个nib。哪一个是合适的取决于笔尖包含的内容以及您使用这些对象的方式。 – Jonah 2011-06-08 14:36:05