iOS – Lógica para detectar iPad / iPhone Dispositivo para storyboard

Necesito definir mi storyboard como parte de un script de Autenticación en mi file de Delegado de aplicación, que se utiliza para pasar datos relevantes a vistas particulares.

Todo funciona bien, pero al definir mi storyboard de esta manera sobrescribo la ruta para todos los dispositivos (iPad o iPhone), quisiera que mi aplicación fuera universal y siguiera diferentes storyboards dependientes del dispositivo; por lo tanto, idealmente me gustaría detectar el dispositivo y aplique la ID de storyboard relevante a una variable para que se ejecute el storyboard correcto y el script de authentication siga funcionando correctamente, pero no estoy seguro de cómo hacerlo …

Este es mi código hasta ahora –

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"ipad_story" bundle:nil]; UIViewController *controller; UINavigationController *navigationController; 

¿Podría el guión gráfico contener lógica para detectar el dispositivo y aplicar ipad_story o ipad_phone?

Hay dos opciones, use el modificador de dispositivo iOS , ~ipad , por lo que tendrá una historia como main_story para iphone y main_story~ipad para iPad.

O si necesita detectarlo en el código mire UIUserInterfaceIdiom :

 if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { // iPad } else { // iPhone } 

La primera opción debe usarse si es posible, la segunda op opción solo es necesaria si tiene que hacerlo en código.

 #define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] prefernetworkingMode].size, CGSizeMake(640, 1136))) UIViewController *homeViewController; if (IS_IPHONE_5) { } else { } 

Si buscas una solución rápida:

 if(UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) { //iPad } else { //iPhone } 
  if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { //iphone } else { //iPad } 

Debe cargar la NIB correcta en init, no seeDidLoad.

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

Usa esta macro

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

}

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