plus - nfc iphone se




La meilleure façon de détecter par programme le matériel iPad/iPhone (6)

Dans Swift, utilisez la propriété d'instance userInterfaceIdiom as-

if UIDevice.current.userInterfaceIdiom == .phone {
     print("iPhone")
 }

& Pour les autres appareils -

  switch UIDevice.current.userInterfaceIdiom {
    case .pad:
        print("iPad")
    case .phone:
        print("iPhone")
    case .tv:
        print("TV")
    case .carPlay:
        print("carPlay")
    default: break;
  }

La raison pour laquelle je dois le découvrir est que sur un iPad, un UIPickerView a la même hauteur en orientation paysage qu'en portrait. Sur un iPhone, c'est différent. Le guide de programmation iPad introduit une valeur "idiome" pour UIDevice:

    UIDevice* thisDevice = [UIDevice currentDevice];
    if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {
        // iPad
    }
    else
    {
        // iPhone
    }

ce qui fonctionne bien tant que vous êtes dans l'iPad (3.2) mais pas dans l'iPhone (3.1.3) - donc il semble qu'il faille aussi ifdef pour compiler conditionnellement cette vérification, comme:

#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
        UIDevice* thisDevice = [UIDevice currentDevice];
        if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad)
        {
            // etc.
        }
#endif

Pour moi, ça commence à être très maladroit. Quoi de mieux?


J'aime ma fonction isPad() . Même code mais gardez-le hors de vue et dans un seul endroit.


La vérification à l'exécution (votre première façon) est complètement différente de #if au moment de la compilation. Les directives du préprocesseur ne vous donneront pas une application universelle.

Le moyen préféré est d'utiliser la Macro d'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.
}

Utilisez 3.2 comme SDK de base (parce que la macro n'est pas définie avant 3.2), vous pouvez cibler les versions antérieures du système d'exploitation pour le faire fonctionner sur l'iPhone.


Ma solution (fonctionne sur 3.2+):

#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)

puis,

if (IS_IPAD)
    // do something

ou

if (IS_IPHONE)
    // do something else

Si vous avez déjà installé l'application sur votre appareil, 2- vous modifiez ses paramètres de construction pour en faire une application 'universelle', 3- installez l'application sur votre appareil en haut de l'application préexistante (sans supprimer la précédente )

Vous pourriez trouver que les solutions fournies ici pour détecter iPhone / iPad ne fonctionnent pas. Tout d'abord, supprimez l'application qui était "uniquement" pour iPad / iPhone et installez-la fraîche sur votre appareil.


Si vous utilisez des fonctionnalités qui ne sont pas rétrocompatibles, j'ai trouvé que le meilleur moyen pour moi est de créer un #define dans l'en-tête pré-compilé. Exemple:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_2
#define USING_4_X
#endif

Ensuite, dans votre code, vous pouvez le faire:

BOOL exists = NO;
#ifdef USING_4_X        
exists = [SomeObject someMethod:[url lastPathComponent]];
#else
exists = [SomeObject someMethod:[[url path] lastPathComponent]];
#endif




ipad