如何为我的iPhone应用程序加载单独的nib文件,以检查用户是否拥有iPhone 5 / iPod Touch 4英寸屏幕而不是3.5英寸屏幕?
这是在init方法中完成的吗?
详情 - 我没有在整个应用程序中使用故事板。有一次我会使用故事板并从其中一个视图控制器调用它。 (有没有办法区分故事板?)
我正在寻找一个在每个单独的viewController中初始化的解决方案......而不是我将放在仅运行一次的appdelegate中的东西。
Autolayout对我来说在很多情况下都不起作用。这些设计非常具有图形性,太多的空白区域让事情看起来很糟糕。
答案 0 :(得分:3)
我找到了办法!
<强>宏强> 我从RayOfHope的https://stackoverflow.com/a/13068238/1492368获得了这个宏
#define HEIGHT_IPHONE_5 568
#define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )
所以在新的指定初始化程序initForLayout中:我写
if(IS_IPHONE_5)
{
self=[super initWithNibName:@"DetailViewControlleriPhone5" bundle:nil];
}
else
{
self=[super initWithNibName:@"DetailViewController" bundle:nil];
}
旧的初始化程序
我从Big Nerd Ranch那里学到了这个: 使用标准初始化程序时抛出异常
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
@throw [NSException exceptionWithName:@"Wrong initializer"
reason:@"Use initForLayout:"
userInfo:nil];
return nil;
}
从另一个ViewController / AppDelegate调用View Controller 因此,当我从另一个视图Controller或appdelegate调用此DetailViewController时,我写道:
DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];