iphone - descargar - ios 12
La mejor forma de detectar mediante programaciĆ³n el hardware de iPad/iPhone (9)
La razón por la que necesito averiguar es que en un iPad, un UIPickerView tiene la misma altura en orientación horizontal que en vertical. En un iPhone es diferente. La guía de programación del iPad introduce un valor "idiom" para UIDevice:
UIDevice* thisDevice = [UIDevice currentDevice];
if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
{
// iPad
}
else
{
// iPhone
}
que funciona bien mientras está en el iPad (3.2) pero no en el iPhone (3.1.3), por lo que parece que también tiene que haber un ifdef para compilar esa verificación condicionalmente, como:
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
UIDevice* thisDevice = [UIDevice currentDevice];
if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
{
// etc.
}
#endif
Para mí eso empieza a parecer muy torpe. ¿Cuál es una mejor manera?
Coloque este método en su delegado de la aplicación para que pueda llamarlo a cualquier lugar utilizando [[[UIApplication sharedApplication] delegate] isPad]
-(BOOL)isPad
{
BOOL isPad;
NSRange range = [[[UIDevice currentDevice] model] rangeOfString:@"iPad"];
if(range.location==NSNotFound)
{
isPad=NO;
}
else {
isPad=YES;
}
return isPad;
}
En Swift use la propiedad de instancia userInterfaceIdiom como-
if UIDevice.current.userInterfaceIdiom == .phone {
print("iPhone")
}
& Para otros dispositivos -
switch UIDevice.current.userInterfaceIdiom {
case .pad:
print("iPad")
case .phone:
print("iPhone")
case .tv:
print("TV")
case .carPlay:
print("carPlay")
default: break;
}
Estoy respondiendo esto ahora (y en esta fecha tardía) porque muchas de las respuestas existentes son bastante antiguas, y la mayoría de los Votados en realidad parecen estar equivocados de acuerdo con los documentos actuales de Apple (iOS 8.1, 2015).
Para demostrar mi punto, este es el comentario del archivo de encabezado de Apple (siempre mire la fuente de Apple y los encabezados):
/*The UI_USER_INTERFACE_IDIOM() macro is provided for use when
deploying to a version of the iOS less than 3.2. If the earliest
version of iPhone/iOS that you will be deploying for is 3.2 or
greater, you may use -[UIDevice userInterfaceIdiom] directly.*/
Por lo tanto, la forma actualmente recomendada por APPLE para detectar iPhone vs. iPad es la siguiente:
1) En versiones de iOS ANTERIORES a 3.2, use la macro suministrada por Apple:
// for iPhone use UIUserInterfaceIdiomPhone
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
2) En las versiones de iOS 3.2 o posterior, use la propiedad en [UIDevice currentDevice]:
// for iPhone use UIUserInterfaceIdiomPhone
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
Me gusta mi función isPad() . Mismo código pero manténgalo fuera de la vista y en un solo lugar.
Mi solución (funciona en 3.2+):
#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
entonces,
if (IS_IPAD)
// do something
o
if (IS_IPHONE)
// do something else
Si 1- ya tienes la aplicación instalada en tu dispositivo, 2- cambias su configuración de compilación para ser una aplicación ''Universal'', 3- instala la aplicación en tu dispositivo encima de la aplicación preexistente (sin eliminar la anterior) )
Es posible que las soluciones proporcionadas aquí para detectar iPhone / iPad no funcionen. Primero, elimine la aplicación que era ''solo'' para iPad / iPhone e instálela en su dispositivo.
Si está utilizando funciones que no son compatibles con versiones anteriores, encontré que la mejor manera para mí es crear un #define en el encabezado precompilado. Ejemplo:
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2
#define USING_4_X
#endif
Luego, en tu código, puedes hacer esto:
BOOL exists = NO;
#ifdef USING_4_X
exists = [SomeObject someMethod:[url lastPathComponent]];
#else
exists = [SomeObject someMethod:[[url path] lastPathComponent]];
#endif
Verificar en tiempo de ejecución (su primera forma) es completamente diferente de #if en el momento de la compilación. Las directivas de preprocesador no le darán una aplicación universal.
La forma preferida es usar Macro de Apple:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
// The device is an iPad running iPhone 3.2 or later.
}
else
{
// The device is an iPhone or iPod touch.
}
Use 3.2 como el SDK base (porque la macro no está definida pre 3.2), puede orientar versiones anteriores del sistema operativo para ejecutarlo en el iPhone.
BOOL isIpad()
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
return NO;
}