Juste pour ma référence:
@property (nonatomic, readonly) BOOL isPhone;
-(BOOL)isPhone {
return (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone);
}
ou utiliser un #define
#define IS_PHONE (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone)
Toutefois, si vous utilisez isPhone
partout dans votre code, c'est généralement une mauvaise pratique. Utiliser le modèle de fabrique et le polymorphisme de garder votre if
déclarations contenues, de sorte que vous obtenez les objets créés pour le téléphone ou pour l'iPad, puis de travailler avec ceux-ci.
Ajouté
Je suis l'aide de cette solution sur mon code maintenant. Il ajoute un standard d'usine de motif dans les 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\
Alors mes allocations ressembler à ceci:
+alloc { ALLOC_PER_DEVICE(); }
Et j'ajoute une sous-classe appelée TheClassPhone
pour la version de téléphone.
Remarque: comme il n'y a pas d'héritage multiple en Objective-C, l'utilisation de l'héritage pour résoudre vos problèmes est un peu surfait (c'est à dire, il ne fonctionne pas si vous avez des sous-classes de sous-classes). Rien de tel qu'un bon if
quand vous en avez besoin.