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]; }