iOS – 逻辑检测故事板的iPad / iPhone设备
我需要将我的故事板定义为我的应用程序委托文件中的身份validation脚本的一部分,该文件用于将相关数据传递给特定的视图。
所有的工作都很好 – 但通过这样定义我的故事板,我覆盖了所有设备(iPad或iPhone)的path,我希望我的应用程序是通用的,并遵循不同的故事板依赖于设备 – 因此理想情况下,我想检测该设备,并将相关的故事板ID应用到一个variables,所以正确的故事板运行,身份validation脚本仍然正常工作 – 但我不知道如何做到这一点..
这是我的代码到目前为止 –
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"ipad_story" bundle:nil]; UIViewController *controller; UINavigationController *navigationController;
故事板可以包含逻辑来检测设备,并应用ipad_story或ipad_phone?
有两个select,使用iOS设备修改器 , main_story
,所以你将有像iPhone的main_story~ipad
和iPad的main_story~ipad
故事。
或者,如果您需要在代码中检测它,请查看UIUserInterfaceIdiom
:
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { // iPad } else { // iPhone }
如果可能的话,应该使用第一个选项,第二个选项只有在代码中需要时才需要。
#define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size, CGSizeMake(640, 1136))) UIViewController *homeViewController; if (IS_IPHONE_5) { } else { }
如果你正在寻找一个迅速的解决scheme:
if(UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) { //iPad } else { //iPhone }
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { //iphone } else { //iPad }
您需要在init中加载正确的NIB,而不是viewDidLoad。
- (id)init if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) { return [self initWithNibName:@"ViewControllerIpad" bundle:nil]; } else if ([[UIScreen mainScreen] bounds].size.height == 568) { return [self initWithNibName:@"ViewControllerIphone5" bundle:nil]; } else { return [self initWithNibName:@"ViewController" bundle:nil]; } }
使用这个macros
#define IS_IPAD ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; } else { [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
}
要检测iPad / iPhone:
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; } else { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; }