2010-07-08 3 views

Répondre

4

La solution de Brad est absolument correcte. Si vous concevez une application universelle conçue pour s'exécuter sur des iPhones avec un système d'exploitation plus ancien, ainsi qu'avec des iPads et des iPhones récents, vous pouvez ajouter ce code pour intercepter des situations où l'idiome n'est pas défini.

// If iPhoneOS is 3.2 or greater then __IPHONE_3_2 will be defined 
#ifndef __IPHONE_3_2  

typedef enum { 
    UIUserInterfaceIdiomPhone,   // iPhone and iPod touch 
    UIUserInterfaceIdiomPad,    // iPad 
} UIUserInterfaceIdiom; 

#define UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPhone 

#endif // ifndef __IPHONE_3_2 
+3

Cela ne devrait être nécessaire que si l'application est construite avec un SDK plus ancien. Si vous développez avec 3.2+ et que vous ciblez 3.x, vous ne devriez pas avoir besoin du code supplémentaire. Étant donné que Apple exige maintenant que vous compiliez en utilisant le SDK 4.0 pour le soumettre à l'App Store, vous ne devriez pas avoir besoin de ce code pour aller de l'avant. –

+2

La fonction est simplement évaluée à 0 sur les anciens systèmes d'exploitation, ce qui provoque le fonctionnement de l'instruction d'égalité comme si elle avait détecté un périphérique non iPad. Par conséquent, cela fonctionne comme prévu même sur les anciens systèmes d'exploitation. –

+0

Merci. CA aide. J'ai SDK 4 installé sur mon iMAC mais mon iPhone a toujours 3.1.2. Donc, ce sera important. Je n'ai pas d'iPAD (l'application utilise un appareil photo pour iPhone et une photothèque pour iPAD). Est-ce que je peux "louer" un iPAD de quelque part puisque je ne veux pas libérer l'application sans essai sur un vrai appareil. –

33

Il est fortement recommandé que vous faites pas la détection du type de dispositif pour déterminer si l'application est exécutée sur un iPad, mais que vous examiniez fonctionnalités ou l'idiome de l'interface utilisateur. De nombreuses applications qui testent uniquement des types d'appareils spécifiques se rompent lorsque le nouveau matériel sort (ce qui tend à être assez fréquent).

Habituellement, si vous devez déterminer si une application fonctionne sur un iPad, c'est parce que vous devez ajuster l'interface utilisateur pour qu'elle corresponde à la plus grande zone d'affichage de l'appareil. Pour cela, Apple vous recommande de vérifier l'idiome de l'interface utilisateur en utilisant le code suivant:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    // iPad-specific interface here 
} 
else 
{ 
    // iPhone and iPod touch interface here 
} 
+0

L'autre valeur retournée serait UIUserInterfaceIdiomPhone. – arlomedia

2

Voici la meilleure réponse que je suis:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{ 
    //iPhone methods 
} 
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{ 
    //iPad methods 
} 
+0

Je recommanderais celui-ci sur le code de Brad avec seulement une autre boucle. Pas étonnant que demain Apple arrive avec une nouvelle taille d'écran qui est même différente de celle de l'iPhone. –

0
if ([(NSString*)[UIDevice currentDevice].model isEqualToString:@"iPad"]) { 
      NSLog(@"...in iPad");   
} else { 
      NSLog(@"...in iPhone/iPod");    
} 
1

essayer cette

 if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) 
     { 
      // etc. 
     } 
    else 
     { 
     //iphone 
     } 
Questions connexes