我找到了一种方法!
- 我使单独的榫文件,一个用于3.5"/iPhone非视网膜和一个用于iPhone5的
- 我使用宏来检查当前电话是一个iPhone 5格式与否。(1)
- 对于普通initWithNibName:包:我写一个例外,这样它们不使用正常初始化我命名为@“初始化错误”
- 我创建了一个新的指定初始化为的viewController其命名为initForFormat:
- 我使用我的宏,并检查如果设备是iPhone 5或不。如果它是iphone5然后我笔尖名初始化ViewControllerIphone5
宏 我这个宏从https://stackoverflow.com/a/13068238/1492368从RayOfHope
#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];
}
旧的初始化程序
使用标准的初始化
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
@throw [NSException exceptionWithName:@"Wrong initializer"
reason:@"Use initForLayout:"
userInfo:nil];
return nil;
}
从另一个视图控制器/ AppDelegate中 因此调用视图控制器,当我从另一个视图控制器调用此DetailViewController时 抛出一个异常:
我了解到这个来自大书呆子牧场或者我的appdelegate写:
DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];