Sólo por mi referencia:
@property (nonatomic, readonly) BOOL isPhone;
-(BOOL)isPhone {
return (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone);
}
o utilizar un #define
#define IS_PHONE (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
Sin embargo, si usted está utilizando isPhone
todo su código, que es generalmente una mala práctica. Utilice el patrón de fábrica y el polimorfismo para mantener sus declaraciones if
contenidas, para que pueda obtener los objetos creados para el teléfono o para iPad y luego trabajar con ellos.
Agregado
estoy usando esta solución todo mi código ahora. Agrega un patrón de fábrica estándar en el alloc.
#define ALLOC_PER_DEVICE() id retVal = nil; \
NSString *className = NSStringFromClass(self);\
if (IS_PHONE && ![className hasSuffix:@"Phone"]) {\
className = [NSString stringWithFormat:@"%@Phone", className];\
Class newClass = NSClassFromString(className);\
retVal = [newClass alloc];\
}\
if (!retVal)\
retVal = [super alloc];\
assert(retVal != nil);\
return retVal\
Entonces mis allocs tener este aspecto:
+alloc { ALLOC_PER_DEVICE(); }
Y añado una subclase llamada TheClassPhone
para la versión del teléfono.
Nota: Ya que no hay herencia múltiple en Objective-C, utilizando la herencia para resolver sus problemas es un poco sobrevalorado (es decir, no funciona si tiene subclases de subclases). No hay nada como un buen if
cuando lo necesite.
Gotcha - Puedo utilizar respondsToSelector: @selector (userInterfaceIdiom) en lugar de la comprobación de la existencia de la cadena " iPad ". ¡Gracias! – Eric
use la macro - más tarde OS responderá al selector, pero no necesariamente será un iPad. – Andiih
Ok, estoy aprendiendo. :) Mi #fail: He estado usando el simulador para alternar entre iPhone y iPad al cambiar el Active SDK entre 3.2 y 3.1, en el cual ya no compila cuando el Active SDK es 3.1. Luego sacudí las neuronas con algo de cafeína y conecté el #ifdef UI_USER_INTERFACE_IDIOM a su alrededor ... De todos modos, gracias por el seguimiento Andiih - y si acabo de componer mi #fail a algo #worsethanfailure con el #ifdef, déjame saber. :) – Eric