Detectar tipo de dispositivo

En mi aplicación (escrita en Objective-C), ¿cómo puedo detectar si el dispositivo es un iPhone, iPad o iPhone5?

if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { // [iphone] or [itouch] } else { // [ipad] } 

puede detectar fácilmente iphone, iphone5 y iPad con condiciones inferiores (¡pero no iTouch! iTouch se trata como si fuera un iPhone con este código): –

  if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone) { if ([[UIScreen mainScreen] bounds].size.height == 568) { } else { //iphone 3.5 inch screen } } else { //[ipad] } 

ACTUALIZAR

También puede usar MACRO o definir Variable para comprobar que es iPhone5, iPhone4 o iPad como Bellow: –

 #define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE #define isiPhone (UI_USER_INTERFACE_IDIOM() == 0)?TRUE:FALSE 

Ejemplo:-

 if(isiPhone) { if (isiPhone5) { } else { //iphone 3.5 inch screen } } else { //[ipad] } 

Por favor revisa el siguiente código:

UIDevice_enhanced.h

 @interface UIDevice (Enhanced) typedef enum { kUnknownPlatform = 0, kiPhone1G, kiPhone3G, kiPhone3GS, kiPhone4, kiPhone4Verizon, kiPhone4S, kiPhone5GSM, kiPhone5CDMA, kiPhone5CGSM, kiPhone5CCDMA, kiPhone5SGSM, kiPhone5SCDMA, kiPhone6, kiPhone6P, kiPhone6S, kiPhone6SP, kiPodTouch1G, kiPodTouch2G, kiPodTouch3G, kiPodTouch4G, kiPodTouch5G, kiPad, kiPad2Wifi, kiPad2GSM, kiPad2CMDA, kiPad3Wifi, kiPad3GSM, kiPad3CMDA, kiPad4Wifi, kiPad4GSM, kiPad4CMDA, kiPadAirWifi, kiPadAirCellular, kiPadMiniWifi, kiPadMiniGSM, kiPadMiniCDMA, kiPadMini2GWifi, kiPadMini2GCellular, kSimulator } PlatformType; - (NSString *) platformName; - (PlatformType) platform; @end 

UIDevice_enhanced.m

 #import "UIDevice_enhanced.h" #include  @interface UIDevice (Enhanced) - (NSString *) platformCode; @end @implementation UIDevice (Enhanced) // Utility method (private) - (NSString*) platformCode { struct utsname systemInfo; uname(&systemInfo); NSString* platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; return platform; } // Public method to use - (NSString*) platformName { NSString* platform = [self platformCode]; if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)"; if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G"; if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G"; if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G"; if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G"; if ([platform isEqualToString:@"iPad1,1"]) return @"iPad"; if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)"; if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)"; if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)"; if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (WiFi)"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)"; if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)"; if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)"; if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)"; if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)"; if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)"; if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)"; if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (WiFi)"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)"; if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } // Public method to use - (PlatformType) platform { NSString *platform = [self platformCode]; if ([platform isEqualToString:@"iPhone1,1"]) return kiPhone1G; if ([platform isEqualToString:@"iPhone1,2"]) return kiPhone3G; if ([platform isEqualToString:@"iPhone2,1"]) return kiPhone3GS; if ([platform isEqualToString:@"iPhone3,1"]) return kiPhone4; if ([platform isEqualToString:@"iPhone3,2"]) return kiPhone4Verizon; if ([platform isEqualToString:@"iPhone4,1"]) return kiPhone4S; if ([platform isEqualToString:@"iPhone5,1"]) return kiPhone5GSM; if ([platform isEqualToString:@"iPhone5,2"]) return kiPhone5CDMA; if ([platform isEqualToString:@"iPhone5,3"]) return kiPhone5CGSM; if ([platform isEqualToString:@"iPhone5,4"]) return kiPhone5CCDMA; if ([platform isEqualToString:@"iPhone6,1"]) return kiPhone5SGSM; if ([platform isEqualToString:@"iPhone6,2"]) return kiPhone5SCDMA; if ([platform isEqualToString:@"iPhone7,1"]) return kiPhone6P; if ([platform isEqualToString:@"iPhone7,2"]) return kiPhone6; if ([platform isEqualToString:@"iPhone8,2"]) return kiPhone6SP; if ([platform isEqualToString:@"iPhone8,1"]) return kiPhone6S; if ([platform isEqualToString:@"iPod1,1"]) return kiPodTouch1G; if ([platform isEqualToString:@"iPod2,1"]) return kiPodTouch2G; if ([platform isEqualToString:@"iPod3,1"]) return kiPodTouch3G; if ([platform isEqualToString:@"iPod4,1"]) return kiPodTouch4G; if ([platform isEqualToString:@"iPod5,1"]) return kiPodTouch5G; if ([platform isEqualToString:@"iPad1,1"]) return kiPad; if ([platform isEqualToString:@"iPad2,1"]) return kiPad2Wifi; if ([platform isEqualToString:@"iPad2,2"]) return kiPad2GSM; if ([platform isEqualToString:@"iPad2,3"]) return kiPad2CMDA; if ([platform isEqualToString:@"iPad2,4"]) return kiPad2Wifi; if ([platform isEqualToString:@"iPad2,5"]) return kiPadMiniWifi; if ([platform isEqualToString:@"iPad2,6"]) return kiPadMiniGSM; if ([platform isEqualToString:@"iPad2,7"]) return kiPadMiniCDMA; if ([platform isEqualToString:@"iPad3,1"]) return kiPad3Wifi; if ([platform isEqualToString:@"iPad3,2"]) return kiPad3CDMA; if ([platform isEqualToString:@"iPad3,3"]) return kiPad3GSM; if ([platform isEqualToString:@"iPad3,4"]) return kiPad4Wifi; if ([platform isEqualToString:@"iPad3,5"]) return kiPad4GSM; if ([platform isEqualToString:@"iPad3,6"]) return kiPad4CDMA; if ([platform isEqualToString:@"iPad4,1"]) return kiPadAirWifi; if ([platform isEqualToString:@"iPad4,2"]) return kiPadAirCellular; if ([platform isEqualToString:@"iPad4,4"]) return kiPadMini2GWifi; if ([platform isEqualToString:@"iPad4,5"]) return kiPadMini2GCellular; if ([platform isEqualToString:@"i386"]) return kSimulator; if ([platform isEqualToString:@"x86_64"]) return kSimulator; return kUnknownPlatform; } @end 

Espero que esto funcione para usted…

 - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) { nibName = [NSString stringWithFormat:@"%@_568", nibName]; } if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { nibName = [NSString stringWithFormat:@"%@_iPad", nibName]; { } if (self = [super initWithNibName:nibName bundle:nibBundle]) { } return self; } 

La primera statement verifica el clima del dispositivo que tiene tiene la pantalla del iPhone 5.

The Second verifica el clima que está usando un iPad.

El tercero devuelve el xib normal para el iPhone 4s y anteriores.

Tenga en cuenta que para hacer esto, tendrá que crear 3 XIB diferentes, todos con un sufijo diferente.

ViewController.xib

ViewController_568.xib

ViewController_iPad.xib

Aquí hay un montón de constantes que puede pegar en su archivo PCH y utilizar a lo largo de su aplicación que le ofrecen muchas cosas diferentes que puede probar. (Pantalla ancha aquí significa iPhone 5 pantalla “más alta”)

 #ifndef IS_WIDESCREEN #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) #endif #ifndef IS_IPHONE #define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) #endif #ifndef IS_IPOD #define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"]) #endif #ifndef IS_IPAD #define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"]) #endif #ifndef IS_IPHONE5 #define IS_IPHONE5 (IS_WIDESCREEN && IS_IPHONE) #endif #ifndef IS_IPOD5 #define IS_IPOD5 (IS_WIDESCREEN && IS_IPOD) #endif 

Puedes usarlo así:

 if(IS_IPHONE5){ // load iPhone5 code/nibs } if(IS_WIDESCREEN){ // load 4" screen stuff here } 
 if ([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) {//iPhone... (not iTouch or iPad) 

 if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]) {//iPad... 

 if (([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) && ([UIScreen mainScreen]bounds].size.height == 568)) {//iPhone5... 

Y también, solo como referencia … iTouch es este:

 if ([[UIDevice currentDevice].model hasPrefix:@"iPod"]) {//iTouch