Quel est l'équivalent de UI_USER_INTERFACE_IDIOM()
Swift pour détecter entre iPhone et iPad?
Je reçois une Use of unresolved identifier
erreur lors de la compilation dans Swift.
Lorsque vous travaillez avec Swift, vous pouvez utiliser le enum
UIUserInterfaceIdiom
, défini comme:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Vous pouvez donc l'utiliser comme:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Ou avec une instruction Switch:
switch UIDevice.current.userInterfaceIdiom {
case .phone:
// It's an iPhone
case .pad:
// It's an iPad (or macOS Catalyst)
case .unspecified:
// Uh, oh! What could it be?
}
UI_USER_INTERFACE_IDIOM()
est une macro Objective-C, qui est définie comme:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Notez également que même lorsque vous travaillez avec Objective-C, la UI_USER_INTERFACE_IDIOM()
macro n'est requise que lorsque vous ciblez iOS 3.2 et versions antérieures. Lors du déploiement sur iOS 3.2 et supérieur, vous pouvez utiliser [UIDevice userInterfaceIdiom]
directement.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
devientUIDevice.current.userInterfaceIdiom
Vous devez utiliser ce framework GBDeviceInfo ou ...
Apple définit ceci:
donc pour la définition stricte de l'appareil peut être utilisé ce code
comment utiliser
détecter la version iOS
comment utiliser
la source
struct ScreenSize/DeviceType
approche car elle fonctionne dans SimulatorSwift 2.0 & iOS 9 & Xcode 7.1
Swift 3.0 et Swift 4.0
Utilisez UITraitCollection. L'environnement de traits iOS est exposé via la propriété traitCollection du protocole UITraitEnvironment. Ce protocole est adopté par les classes suivantes:
la source
si / sinon cas:
la source
Je fais de cette façon:
Il affiche le nom de l'appareil.
Pour vérifier s'il s'agit d'un iPad ou d'un iPhone:
la source
Swift 2.x:
En ajoutant à la réponse de Beslav Turalov, la nouvelle entrée iPad Pro peut être facilement trouvée avec cette ligne
Swift 3 (TV et voiture ajoutés):
UTILISATION :
la source
Essayez d'ajouter une extension comme celle-ci:
Voici comment vous allez l'utiliser:
EDIT Pour le simulateur, vous pouvez essayer une solution ici
la source
Extension Swift 4.2
Usage
la source
Dans swift 4 et Xcode 9.2, vous pouvez détecter si un appareil est iPhone / iPad par les moyens ci-dessous.
Autrement
la source
Merci à tous de soutenir :))
UIDevice + Extensions.swift
SharedFunctions.swift
String + Whitespace.swift
la source
Essayez ceci pour vérifier que l'appareil actuel est un iPhone ou un iPad:
Swift 5
Utilisation:
la source
Swift 2.0 et iOS 7+ / iOS 8+ / iOS 9+
Utilisation :
OU
Merci @ user3378170
la source
Pour info, j'ai utilisé
UI_USER_INTERFACE_IDIOM()
pour mon application écrite en Swift. L'application peut être bien compilée avec XCode 6.3.1 sans aucun avertissement sur cette commande, fonctionne bien sur Simulator (avec tous les appareils sélectionnés) et sur tous mes vrais appareils (iPhone, iPad) avec les versions iOS de 7.1 à 8.3.Cependant, l'application s'est bloquée sur les appareils des évaluateurs Apple (et a été refusée). Cela m'a pris quelques jours pour détecter le problème avec quelques autres téléchargements sur iTunes Connect.
Maintenant, j'utilise à la
UIDevice.currentDevice().userInterfaceIdiom
place et mon application peut survivre à de tels plantages.la source
Si vous souhaitez vérifier l'appareil actuel, que ce soit son iPad ou iPhone, vous pouvez utiliser ces lignes de code:
la source
Swift 3.0 :
la source
A fait quelques ajouts aux réponses ci-dessus afin que vous obteniez retourné un type au lieu d'une valeur de chaîne.
Je pensais que cela allait principalement être utilisé pour les ajustements de l'interface utilisateur, donc je ne pensais pas qu'il était pertinent d'inclure tous les sous-modèles, c'est-à-dire l'iPhone 5, mais cela pourrait être facilement étendu en ajoutant des tests de modèle à la baie isDevice.
Testé fonctionnant dans Swift 3.1 Xcode 8.3.2 avec des périphériques physiques et simulateurs
La mise en oeuvre:
UIDevice.whichDevice()
J'ai créé un framework appelé SVNBootstaper qui inclut ceci et quelques autres protocoles d'assistance, il est public et disponible via Carthage.
la source
Depuis iOS 13,
UI_USER_INTERFACE_IDIOM
est obsolète. Si votre code est toujours dedansObj-C
, vous pouvez utiliser ce qui suit:Où:
la source