我找到了办法!
- 我制作了单独的笔尖文件,一个用于 3.5" / iPhone 非视网膜,一个用于 iPhone5
- 我使用宏来检查当前手机是否为 iPhone 5 格式。(1)
- 对于普通的 initWithNibName:bundle: 我写了一个异常,以便他们不使用普通的初始化程序。我把它命名为@“错误的初始化程序”
- 我为 viewController 创建了一个新的指定初始化程序,将其命名为 initForFormat:
- 我使用我的宏检查设备是否是 iPhone 5。如果是 iphone5,那么我使用 nib 名称 ViewControllerIphone5 进行初始化
宏
我从 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
所以当我从另一个 View Controller 或 appdelegate 调用这个 DetailViewController 时,我会写:
DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];