Jaki jest odpowiednik funkcji UI_USER_INTERFACE_IDIOM()
Swift w wykrywaniu między iPhonem a iPadem?
Otrzymuję Use of unresolved identifier
błąd podczas kompilowania w Swift.
Podczas pracy z Swift możesz użyć enum
UIUserInterfaceIdiom
zdefiniowanego jako:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Możesz więc użyć go jako:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Lub z instrukcją 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()
to makro Objective-C, które jest zdefiniowane jako:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Pamiętaj też, że nawet podczas pracy z Objective-C UI_USER_INTERFACE_IDIOM()
makro jest wymagane tylko w przypadku iOS iOS 3.2 i niższych. Wdrażając w iOS 3.2 i nowszych, możesz użyć [UIDevice userInterfaceIdiom]
bezpośrednio.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
staje sięUIDevice.current.userInterfaceIdiom
Powinieneś użyć tej struktury GBDeviceInfo lub ...
Apple określa to:
więc do ścisłej definicji urządzenia można użyć tego kodu
jak używać
wykryć wersję iOS
jak używać
źródło
struct ScreenSize/DeviceType
podejście, ponieważ działa w SimulatorSwift 2.0 i iOS 9 oraz Xcode 7.1
Swift 3.0 i Swift 4.0
Użyj UITraitCollection. Środowisko cecha iOS jest narażona choć traitCollection własności protokołu UITraitEnvironment. Protokół ten jest przyjmowany przez następujące klasy:
źródło
jeśli / w innym przypadku:
źródło
Robię w ten sposób:
Pokazuje nazwę urządzenia.
Aby sprawdzić, czy jest iPad lub iPhone:
źródło
Swift 2.x:
Dodając do odpowiedzi Beslava Turalova, w tej linii można łatwo znaleźć iPada Pro
Swift 3 (dodano telewizor i samochód):
SPOSÓB UŻYCIA :
źródło
Spróbuj dodać takie rozszerzenie:
Tak to wykorzystasz:
EDYCJA W przypadku symulatora możesz wypróbować rozwiązanie tutaj
źródło
Rozszerzenie Swift 4.2
Stosowanie
źródło
W Swift 4 i Xcode 9.2 poniżej możesz sprawdzić, czy urządzenie to iPhone / iPad.
Inny sposób
źródło
Dziękuję wszystkim wsparcie :))
UIDevice + Extensions.swift
SharedFunctions.swift
String + Whitespace.swift
źródło
Spróbuj tego, aby sprawdzić, czy bieżącym urządzeniem jest iPhone lub iPad:
Szybki 5
Posługiwać się:
źródło
Swift 2.0 i iOS 7+ / iOS 8+ / iOS 9+
Posługiwać się :
LUB
Dzięki @ user3378170
źródło
FYI, użyłem
UI_USER_INTERFACE_IDIOM()
mojej aplikacji napisanej w Swift. Aplikacja może być dobrze skompilowana z XCode 6.3.1 bez ostrzeżenia o tym poleceniu, działa dobrze na Symulatorze (z dowolnymi wybranymi urządzeniami) i na wszystkich moich rzeczywistych urządzeniach (iPhone, iPad) z wersjami iOS od 7.1 do 8.3.Jednak aplikacja uległa awarii na urządzeniach recenzentów Apple (i została odrzucona). Kilka dni zajęło mi wykrycie problemu z kilkoma ponownymi przesłaniami do iTunes Connect.
Teraz używam
UIDevice.currentDevice().userInterfaceIdiom
zamiast tego, a moja aplikacja może przetrwać po takich awariach.źródło
Jeśli chcesz sprawdzić bieżące urządzenie, czy to iPad, czy iPhone, możesz użyć następującego wiersza kodu:
źródło
Swift 3.0 :
źródło
Dodałem kilka dodatków do powyższych odpowiedzi, aby otrzymać typ zamiast wartości ciągu.
Doszedłem do wniosku, że będzie to przede wszystkim wykorzystywane do dostosowywania interfejsu użytkownika, więc nie uważałem za istotne uwzględnienie wszystkich modeli podrzędnych, tj. IPhone'a 5s, ale można to łatwo rozszerzyć, dodając testy modelu do macierzy isDevice
Testowany w Swift 3.1 Xcode 8.3.2 z urządzeniami fizycznymi i symulatorami
Realizacja:
UIDevice.whichDevice()
Stworzyłem framework o nazwie SVNBootstaper, który zawiera ten i kilka innych protokołów pomocniczych, jest publiczny i dostępny poprzez Carthage.
źródło
Od iOS 13
UI_USER_INTERFACE_IDIOM
jest przestarzały. Jeśli Twój kod jest nadal dostępnyObj-C
, możesz użyć następujących opcji:Gdzie:
źródło