Apa yang setara dengan UI_USER_INTERFACE_IDIOM()
di Swift untuk mendeteksi antara iPhone dan iPad?
Saya mendapatkan Use of unresolved identifier
kesalahan saat kompilasi di Swift.
Saat bekerja dengan Swift, Anda dapat menggunakan enum
UIUserInterfaceIdiom
, yang didefinisikan sebagai:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Jadi Anda bisa menggunakannya sebagai:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Atau dengan pernyataan 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()
adalah makro Objective-C, yang didefinisikan sebagai:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Juga, perhatikan bahwa meskipun bekerja dengan Objective-C, UI_USER_INTERFACE_IDIOM()
makro hanya diperlukan saat menargetkan iOS 3.2 dan di bawah. Saat menyebarkan ke iOS 3.2 dan lebih tinggi, Anda dapat menggunakan [UIDevice userInterfaceIdiom]
secara langsung.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
menjadiUIDevice.current.userInterfaceIdiom
Anda harus menggunakan kerangka kerja GBDeviceInfo ini atau ...
Apple mendefinisikan ini:
jadi untuk definisi perangkat yang ketat dapat digunakan kode ini
Cara Penggunaan
untuk mendeteksi versi iOS
Cara Penggunaan
sumber
struct ScreenSize/DeviceType
pendekatan karena bekerja di SimulatorSwift 2.0 & iOS 9 & Xcode 7.1
Swift 3.0 dan Swift 4.0
Gunakan UITraitCollection. Lingkungan sifat iOS terpapar melalui properti traitCollection dari protokol UITraitEnvironment. Protokol ini diadopsi oleh kelas-kelas berikut:
sumber
jika / selain itu:
sumber
Saya melakukannya dengan cara itu:
Ini menunjukkan nama perangkat.
Untuk memeriksa apakah iPad atau iPhone:
sumber
Swift 2.x:
Menambahkan ke jawaban Beslav Turalov entri iPad Pro baru dapat dengan mudah ditemukan dengan baris ini
Swift 3 (TV dan mobil ditambahkan):
PENGGUNAAN :
sumber
Coba tambahkan ekstensi seperti ini:
Ini adalah bagaimana Anda akan menggunakannya:
EDIT Untuk simulator, Anda dapat mencoba solusinya di sini
sumber
Ekstensi Swift 4.2
Pemakaian
sumber
Di swift 4 & Xcode 9.2, Anda dapat mendeteksi apakah suatu perangkat adalah iPhone / iPad dengan cara-cara di bawah ini.
Cara lain
sumber
Terima kasih semua orang mendukung :))
UIDevice + Extensions.swift
BerbagiFunctions.swift
String + Whitespace.swift
sumber
Coba ini untuk memeriksa perangkat saat ini adalah iPhone atau iPad:
Cepat 5
Menggunakan:
sumber
Swift 2.0 & iOS 7+ / iOS 8+ / iOS 9+
Gunakan:
ATAU
Terima kasih @ user3378170
sumber
FYI, saya telah menggunakan
UI_USER_INTERFACE_IDIOM()
aplikasi saya yang ditulis dalam Swift. Aplikasi ini dapat dikompilasi dengan baik dengan XCode 6.3.1 tanpa peringatan pada perintah itu, berjalan dengan baik pada Simulator (dengan perangkat yang dipilih) dan pada semua perangkat saya yang sebenarnya (iPhone, iPad) dengan versi iOS dari 7.1 hingga 8.3.Namun, aplikasi mogok di perangkat pengulas Apple (dan ditolak). Butuh beberapa hari untuk mendeteksi masalah dengan beberapa unggahan ulang ke iTunes Connect.
Sekarang saya menggunakan
UIDevice.currentDevice().userInterfaceIdiom
sebagai gantinya dan aplikasi saya dapat bertahan dari crash seperti itu.sumber
Jika Anda ingin memeriksa perangkat saat ini apakah iPad atau iPhone, maka Anda dapat menggunakan baris kode ini:
sumber
Swift 3.0 :
sumber
Buat beberapa tambahan untuk jawaban di atas sehingga Anda mendapatkan kembali suatu tipe daripada nilai string.
Saya pikir ini terutama akan digunakan untuk penyesuaian UI jadi saya tidak berpikir itu relevan untuk memasukkan semua sub model yaitu iPhone 5s tetapi ini bisa dengan mudah diperpanjang dengan menambahkan tes model ke isDevice Array
Diuji bekerja di Swift 3.1 Xcode 8.3.2 dengan perangkat fisik dan simulator
Penerapan:
UIDevice.whichDevice()
Saya telah membuat kerangka kerja yang disebut SVNBootstaper yang mencakup ini dan beberapa protokol pembantu lainnya, ini publik dan tersedia melalui Carthage.
sumber
Sejak iOS 13,
UI_USER_INTERFACE_IDIOM
telah ditinggalkan. Jika kode Anda masih adaObj-C
, Anda dapat menggunakan yang berikut:Dimana:
sumber