iOS detecta si el usuario está en un iPad

Tengo una aplicación que se ejecuta en el iPhone y iPod Touch, puede ejecutarse en el iPad Retina y todo, pero debe haber un ajuste. Necesito detectar si el dispositivo actual es un iPad. ¿Qué código puedo usar para detectar si el usuario está usando un iPad en mi UIViewController y luego cambiar algo en consecuencia?

Hay bastantes formas de verificar si un dispositivo es un iPad. Esta es mi forma favorita de verificar si el dispositivo es, de hecho, un iPad:

 if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) { return YES; /* Device is iPad */ } 

La forma en que lo uso

 #define IDIOM UI_USER_INTERFACE_IDIOM() #define IPAD UIUserInterfaceIdiomPad if ( IDIOM == IPAD ) { /* do something specifically for iPad. */ } else { /* do something specifically for iPhone or iPod touch. */ } 

Otros ejemplos

 if ( [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] ) { return YES; /* Device is iPad */ } #define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) if ( IPAD ) return YES; 

Para una solución Swift, vea esta respuesta: https://stackoverflow.com/a/27517536/2057171

En Swift puedes usar las siguientes ecualidades para determinar el tipo de dispositivo en las aplicaciones universales:

 UIDevice.current.userInterfaceIdiom == .phone // or UIDevice.current.userInterfaceIdiom == .pad 

El uso sería algo así como:

 if UIDevice.current.userInterfaceIdiom == .pad { // Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified // Implement your logic here } 

Esto es parte de UIDevice a partir de iOS 3.2, por ejemplo:

 [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad 

También puedes usar esto

 #define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ... if (IPAD) { // iPad } else { // iPhone / iPod Touch } 

UI_USER_INTERFACE_IDIOM () solo devuelve el iPad si la aplicación es para iPad o Universal. Si es una aplicación de iPhone que se ejecuta en un iPad, no lo hará. Por lo tanto, debería verificar el modelo en su lugar.

Tenga cuidado: si su aplicación apunta solo a dispositivos iPhone, el iPad que se ejecuta con el modo compatible con iphone devolverá falso para la statement siguiente:

 #define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 

La forma correcta de detectar dispositivos físicos iPad es:

 #define IS_IPAD_DEVICE ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"]) 

Descubrí que alguna solución no me funcionaba en el simulador dentro de Xcode. En cambio, esto funciona:

ObjC

 NSString *deviceModel = (NSString*)[UIDevice currentDevice].model; if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) { DebugLog(@"iPad"); } else { DebugLog(@"iPhone or iPod Touch"); } 

Rápido

 if UIDevice.current.model.hasPrefix("iPad") { print("iPad") } else { print("iPhone or iPod Touch") } 

También en ‘Otros ejemplos’ en Xcode, el modelo del dispositivo vuelve como ‘iPad Simulator’, por lo que el ajuste anterior debería solucionarlo.

Muchas formas de hacerlo en Swift :

Verificamos el modelo a continuación (solo podemos hacer una búsqueda sensible a mayúsculas aquí):

 class func isUserUsingAnIpad() -> Bool { let deviceModel = UIDevice.currentDevice().model let result: Bool = NSString(string: deviceModel).containsString("iPad") return result } 

Verificamos el modelo a continuación (podemos hacer una búsqueda sensible a mayúsculas / minúsculas aquí):

  class func isUserUsingAnIpad() -> Bool { let deviceModel = UIDevice.currentDevice().model let deviceModelNumberOfCharacters: Int = count(deviceModel) if deviceModel.rangeOfString("iPad", options: NSStringCompareOptions.LiteralSearch, range: Range(start: deviceModel.startIndex, end: advance(deviceModel.startIndex, deviceModelNumberOfCharacters)), locale: nil) != nil { return true } else { return false } } 

UIDevice.currentDevice().userInterfaceIdiom continuación solo devuelve el iPad si la aplicación es para iPad o Universal. Si se trata de una aplicación de iPhone que se ejecuta en un iPad, entonces no lo hará. Por lo tanto, debería verificar el modelo en su lugar. :

  class func isUserUsingAnIpad() -> Bool { if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad { return true } else { return false } } 

Este fragmento a continuación no se comstack si la clase no hereda de un UIViewController , de lo contrario funciona bien. Independientemente de UI_USER_INTERFACE_IDIOM() solo devuelve iPad si la aplicación es para iPad o Universal. Si se trata de una aplicación de iPhone que se ejecuta en un iPad, entonces no lo hará. Por lo tanto, debería verificar el modelo en su lugar. :

 class func isUserUsingAnIpad() -> Bool { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) { return true } else { return false } } 

*

En veloz 3.0

*

  if UIDevice.current.userInterfaceIdiom == .pad { //pad } else if UIDevice.current.userInterfaceIdiom == .phone { //phone } else if UIDevice.current.userInterfaceIdiom == .tv { //tv } else if UIDevice.current.userInterfaceIdiom == .carPlay { //CarDisplay } else { //unspecified } 

Puede verificar rangeOfString para ver si la palabra iPad existe así.

 NSString *deviceModel = (NSString*)[UIDevice currentDevice].model; if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound) { NSLog(@"I am an iPad"); } else { NSLog(@"I am not an iPad"); } 

Otra forma más de Swifty:

 //MARK: - Device Check let iPad = UIUserInterfaceIdiom.Pad let iPhone = UIUserInterfaceIdiom.Phone @available(iOS 9.0, *) /* AppleTV check is iOS9+ */ let TV = UIUserInterfaceIdiom.TV extension UIDevice { static var type: UIUserInterfaceIdiom { return UIDevice.currentDevice().userInterfaceIdiom } } 

Uso:

 if UIDevice.type == iPhone { //it's an iPhone! } if UIDevice.type == iPad { //it's an iPad! } if UIDevice.type == TV { //it's an TV! } 

Muchas respuestas son buenas pero uso así en rápida 4

  1. Crea constante

     struct App { static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false } 
  2. Use así

     if App.isRunningOnIpad { return load(from: .main, identifier: identifier) } else { return load(from: .ipad, identifier: identifier) } 

Editar: Como Sugerencia Cœur simplemente crea una extensión en UIDevice

 extension UIDevice { static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false 

}

Para las últimas versiones de iOS, simplemente agrega UITraitCollection :

 extension UITraitCollection { var isIpad: Bool { return horizontalSizeClass == .regular && verticalSizeClass == .regular } } 

y luego dentro de UIViewController solo verifique:

 if traitCollection.isIpad { ... } 
 if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad) { print("This is iPad") }else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone) { print("This is iPhone"); } 

¿Por qué tan complicado? Así es como lo hago …

Swift 4:

 var iPad : Bool { return UIDevice.current.model.contains("iPad") } 

De esta forma, puedes decir if iPad {}