स्विफ्ट में UI_USER_INTERFACE_IDIOM () के साथ वर्तमान डिवाइस का पता लगाएं


244

UI_USER_INTERFACE_IDIOM()IPhone और iPad के बीच का पता लगाने के लिए स्विफ्ट के बराबर क्या है ?

Use of unresolved identifierस्विफ्ट में संकलन करते समय मुझे एक त्रुटि मिलती है ।

जवाबों:


535

स्विफ्ट के साथ काम करते समय, आप निम्न का उपयोग कर सकते हैं enum UIUserInterfaceIdiom:

enum UIUserInterfaceIdiom : Int {
    case unspecified

    case phone // iPhone and iPod touch style UI
    case pad   // iPad style UI (also includes macOS Catalyst)
}

तो आप इसका उपयोग कर सकते हैं:

UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified

या एक स्विच स्टेटमेंट के साथ:

    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() एक ऑब्जेक्टिव-सी मैक्रो है, जिसे इस रूप में परिभाषित किया गया है:

#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)

यह भी ध्यान दें कि ऑब्जेक्टिव-सी के साथ काम करते समय भी, UI_USER_INTERFACE_IDIOM()आईओएस 3.2 और उससे नीचे का लक्ष्य बनाते समय मैक्रो की आवश्यकता होती है। IOS 3.2 और इसके बाद के वर्जन पर आप [UIDevice userInterfaceIdiom]सीधे इस्तेमाल कर सकते हैं ।


19
कोई बात नहीं। मैंने इसके साथ काम कियाif UIDevice.currentDevice().userInterfaceIdiom == .Pad
मिहाई फ्रेटु

4
जैसा कि टोनी ने नीचे दिए गए उत्तरों में से एक में उल्लेख किया है, जब स्विफ्ट ऐप्स में UI_USER_INTERFACE_IDIOM तब क्रैश हो जाता है जब ऐप को टेस्टफलाइट के माध्यम से तैनात किया जाता है। अजीब बात है, यह तब काम करता है जब ऐप को एक्स-कोड से सीधे डिवाइस पर अपलोड किया जाता है। मैंने भी इस बग को मारा है।
ज़मी

1
@Zmey हां, मेरा ऐप भी अस्वीकार कर दिया गया है क्योंकि UI_USER_INTERFACE_IDIOM समीक्षा में क्रैश हो गया है, बहुत अजीब है
पीसमून

बहुत बहुत धन्यवाद। जब मेरा ऐप का नया संस्करण रिलीज़ हुआ और ऐप स्टोर से दुर्घटनाग्रस्त हो गया, तो मैं इस बग से जूझ रहा था, लेकिन इससे पहले कभी नहीं, जब इसे XCode पर स्थापित किया गया था। उम्मीद है कि मुझे फिक्स के लिए एक समीक्षित समीक्षा मिलेगी।
Computerspezl

6
स्विफ्ट में 3 UIDevice.currentDevice().userInterfaceIdiomबन जाता हैUIDevice.current.userInterfaceIdiom
तिब्बत का सागर तट

113

आपको इस GBDeviceInfo ढांचे का उपयोग करना चाहिए या ...

Apple इसे परिभाषित करता है:

public enum UIUserInterfaceIdiom : Int {

    case unspecified

    case phone // iPhone and iPod touch style UI

    case pad // iPad style UI

    @available(iOS 9.0, *)
    case tv // Apple TV style UI

    @available(iOS 9.0, *)
    case carPlay // CarPlay style UI
}

इसलिए डिवाइस की सख्त परिभाषा के लिए इस कोड का उपयोग किया जा सकता है

struct ScreenSize
{
    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
    static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
    static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

struct DeviceType
{
    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
    static let IS_IPHONE_5          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
    static let IS_IPHONE_6_7          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
    static let IS_IPHONE_6P_7P         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
    static let IS_IPAD_PRO          = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
}

कैसे इस्तेमाल करे

if DeviceType.IS_IPHONE_6P_7P {
    print("IS_IPHONE_6P_7P")
}

iOS संस्करण का पता लगाने के लिए

struct Version{
    static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue
    static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)
    static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)
    static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)
}

कैसे इस्तेमाल करे

if Version.iOS8 {
    print("iOS8")
}

1
मुझे struct ScreenSize/DeviceTypeयह पसंद है क्योंकि यह सिम्युलेटर में काम करता है
सॉफ्टडेनर

स्वीकृत उत्तर इस स्वच्छ उत्तर पर जाना चाहिए
अशूर

INDIA से बहुत प्यार, आपके प्रयासों की सराहना, साझा करने और बेहतर Stackoverflow बनाने के लिए बहुत बहुत धन्यवाद;)
स्विफ्टबॉय

अच्छा उत्तर! +1 जौर से)
XXX

अपडेटेड कोड क्या है? IPhone 7 और 7P के लिए DEVICE_TYPE के संदर्भ में
वैभव झावेरी

36

स्विफ्ट 2.0 और आईओएस 9 और एक्सकोड 7.1

// 1. request an UITraitCollection instance
let deviceIdiom = UIScreen.mainScreen().traitCollection.userInterfaceIdiom

// 2. check the idiom
switch (deviceIdiom) {

case .Pad:
    print("iPad style UI")
case .Phone:
    print("iPhone and iPod touch style UI")
case .TV: 
    print("tvOS style UI")
default:
    print("Unspecified UI idiom")

}

स्विफ्ट 3.0 और स्विफ्ट 4.0

// 1. request an UITraitCollection instance
let deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom

// 2. check the idiom
switch (deviceIdiom) {

case .pad:
    print("iPad style UI")
case .phone:
    print("iPhone and iPod touch style UI")
case .tv: 
    print("tvOS style UI")
default:
    print("Unspecified UI idiom")
}

UITraitCollection का उपयोग करें। IOS विशेषता वातावरण उजागर है, हालांकि UITraitEnvironment प्रोटोकॉल की विशेषता गुणन गुण। इस प्रोटोकॉल को निम्न वर्गों द्वारा अपनाया जाता है:

  • UIScreen
  • UIWindow
  • UIViewController
  • UIPresentationController
  • UIView

25

यदि / अन्यथा मामला:

 if (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad)     
 {
        // Ipad
 }
 else 
 {
       // Iphone
 }

सार्वजनिक एनम UIUserInterfaceIdiom: Int {केस अनिर्दिष्ट @available (iOS 3.2, *) फोन // iPhone और आइपॉड टच शैली UI @available (iOS 3.2, *) मामले पैड // iPad शैली UI @available (iOS 9.0, *) मामला TV // Apple TV स्टाइल UI} UIUserInterfaceIdiom की परिभाषा देखें। यदि यह पैड नहीं है, तो यह फोन, टीवी, अनिर्दिष्ट हो सकता है।
UnchartedWorks

19

मैं इस तरह से करता हूं:

UIDevice.current.model

यह डिवाइस का नाम दिखाता है।

यह जाँचने के लिए कि क्या iPad या iPhone है:

if ( UIDevice.current.model.range(of: "iPad") != nil){
    print("I AM IPAD")
} else {
    print("I AM IPHONE")
}

5
निश्चित रूप से सबसे अच्छा समाधान, मेरे लिए कम से कम। UserInterfaceIdiom के लिए जाँच करें एक समस्या है: यदि आपका ऐप केवल iPhone के लिए है, लेकिन आप iPad पर ऐप लॉन्च करते हैं, तो userInterfaceIdiom == .Phone
Luca Davanzo

निश्चित रूप से सबसे अच्छा समाधान। अच्छा था।
फेटी जूल

10

स्विफ्ट 2.x:

बेस्वाल तुर्लोव के जवाब में जोड़ने के लिए नई प्रविष्टि iPad प्रो आसानी से इस लाइन के साथ मिल सकती है

आईपैड प्रो का पता लगाने के लिए

struct DeviceType
{
    ...
    static let IS_IPAD_PRO = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
}

स्विफ्ट 3 (टीवी और कार जोड़ी गई):

struct ScreenSize
{
    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
    static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
    static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

struct DeviceType
{
    static let IS_IPHONE            = UIDevice.current.userInterfaceIdiom == .phone
    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
    static let IS_IPHONE_5          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
    static let IS_IPHONE_6          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
    static let IS_IPHONE_6P         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
    static let IS_IPHONE_7          = IS_IPHONE_6
    static let IS_IPHONE_7P         = IS_IPHONE_6P
    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
    static let IS_IPAD_PRO_9_7      = IS_IPAD
    static let IS_IPAD_PRO_12_9     = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0
    static let IS_TV                = UIDevice.current.userInterfaceIdiom == .tv
    static let IS_CAR_PLAY          = UIDevice.current.userInterfaceIdiom == .carPlay
}

struct Version{
    static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue
    static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)
    static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)
    static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)
    static let iOS10 = (Version.SYS_VERSION_FLOAT >= 10.0 && Version.SYS_VERSION_FLOAT < 11.0)
}

उपयोग :

if DeviceType.IS_IPHONE_7P { print("iPhone 7 plus") }
if DeviceType.IS_IPAD_PRO_9_7 && Version.iOS10 { print("iPad pro 9.7 with iOS 10 version") }

10

इस तरह से एक एक्सटेंशन जोड़ने की कोशिश करें:

    public extension UIDevice {

    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8 where value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
        case "iPhone7,2":                               return "iPhone 6"
        case "iPhone7,1":                               return "iPhone 6 Plus"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,2":                               return "iPhone 6s Plus"
        case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
        case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
        case "iPhone8,4":                               return "iPhone SE"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":return "iPad Pro"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386", "x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }

}

यह आप इसे कैसे उपयोग करेंगे:

let modelName = UIDevice.currentDevice().modelName

EDIT सिम्युलेटर के लिए, आप यहां समाधान का प्रयास कर सकते हैं


अच्छा है, हालांकि सिम्युलेटर के साथ परीक्षण करने से बस सिम्युलेटर वापस आ जाता है। क्या इसके चारों ओर एक रास्ता है?
स्टीव

7

स्विफ्ट 4.2 एक्सटेंशन

 public extension UIDevice {

    class var isPhone: Bool {
        return UIDevice.current.userInterfaceIdiom == .phone
    }

    class var isPad: Bool {
        return UIDevice.current.userInterfaceIdiom == .pad
    }

    class var isTV: Bool {
        return UIDevice.current.userInterfaceIdiom == .tv
    }

    class var isCarPlay: Bool {
        return UIDevice.current.userInterfaceIdiom == .carPlay
    }
}

प्रयोग

if UIDevice.isPad {
   // Do something
}

5

स्विफ्ट 4 और एक्सकोड 9.2 में, आप पता लगा सकते हैं कि क्या कोई डिवाइस नीचे के तरीके से आईफोन / आईपैड है।

if (UIDevice.current.userInterfaceIdiom == .pad){
   print("iPad")
}
else{
   print("iPhone")
}

दूसरा रास्ता

    let deviceName = UIDevice.current.model
    print(deviceName);
    if deviceName == "iPhone"{
        print("iPhone")
    }
    else{
        print("iPad")
    }

5

आप सभी का धन्यवाद :))

UIDevice + Extensions.swift

import Foundation
import UIKit

extension UIDevice {
    static let modelName: String = {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

         func mapToDevice(identifier: String) -> String { // swiftlint:disable:this cyclomatic_complexity
            #if os(iOS)
            switch identifier {
            case "iPod5,1":                                 return "iPod Touch 5"
            case "iPod7,1":                                 return "iPod Touch 6"
            case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
            case "iPhone4,1":                               return "iPhone 4s"
            case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
            case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
            case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
            case "iPhone7,2":                               return "iPhone 6"
            case "iPhone7,1":                               return "iPhone 6 Plus"
            case "iPhone8,1":                               return "iPhone 6s"
            case "iPhone8,2":                               return "iPhone 6s Plus"
            case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
            case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
            case "iPhone8,4":                               return "iPhone SE"
            case "iPhone10,1", "iPhone10,4":                return "iPhone 8"
            case "iPhone10,2", "iPhone10,5":                return "iPhone 8 Plus"
            case "iPhone10,3", "iPhone10,6":                return "iPhone X"
            case "iPhone11,2":                              return "iPhone XS"
            case "iPhone11,4", "iPhone11,6":                return "iPhone XS Max"
            case "iPhone11,8":                              return "iPhone XR"
            case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
            case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
            case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
            case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
            case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
            case "iPad6,11", "iPad6,12":                    return "iPad 5"
            case "iPad7,5", "iPad7,6":                      return "iPad 6"
            case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
            case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
            case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
            case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
            case "iPad6,3", "iPad6,4":                      return "iPad Pro 9.7 Inch"
            case "iPad6,7", "iPad6,8":                      return "iPad Pro 12.9 Inch"
            case "iPad7,1", "iPad7,2":                      return "iPad Pro 12.9 Inch 2. Generation"
            case "iPad7,3", "iPad7,4":                      return "iPad Pro 10.5 Inch"
            case "AppleTV5,3":                              return "Apple TV"
            case "AppleTV6,2":                              return "Apple TV 4K"
            case "AudioAccessory1,1":                       return "HomePod"
            case "i386", "x86_64":                          return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "iOS"))"
            default:                                        return identifier
            }
            #elseif os(tvOS)
            switch identifier {
            case "AppleTV5,3": return "Apple TV 4"
            case "AppleTV6,2": return "Apple TV 4K"
            case "i386", "x86_64": return "Simulator \(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "tvOS"))"
            default: return identifier
            }
            #endif
        }
        return mapToDevice(identifier: identifier)
    }()
}

enum DeviceName: String {
    case iPod_Touch_5 = "iPod Touch 5"
    case pod_Touch_6 = "Pod Touch 6"
    case iPhone_4 = "iPhone 4"
    case iPhone_4s = "iPhone 4s"
    case iPhone_5 = "iPhone 5"
    case iPhone_5c = "iPhone 5c"
    case iPhone_5s = "iPhone 5s"
    case iPhone_6 = "iPhone 6"
    case iPhone_6_Plus = "iPhone 6 Plus"
    case iPhone_6s = "iPhone 6s"
    case iPhone_6s_Plus = "iPhone 6s Plus"
    case iPhone_7 = "iPhone 7"
    case iPhone_7_Plus = "iPhone 7 Plus"
    case iPhone_SE = "iPhone SE"
    case iPhone_8 = "iPhone 8"
    case iPhone_8_Plus = "iPhone 8 Plus"
    case iPhone_X = "iPhone X"
    case iPhone_XS = "iPhone XS"
    case iPhone_XS_Max = "iPhone XS Max"
    case iPhone_XR = "iPhone XR"
    case iPad_2 = "iPad 2"
    case iPad_3 = "iPad 3"
    case iPad_4 = "iPad 4"
    case iPad_Air = "iPad Air"
    case iPad_Air_2 = "iPad Air 2"
    case iPad_5 = "iPad 5"
    case iPad_6 = "iPad 6"
    case iPad_Mini = "iPad Mini"
    case iPad_Mini_2 = "iPad Mini 2"
    case iPad_Mini_3 = "iPad Mini 3"
    case iPad_Mini_4 = "iPad Mini 4"
    case iPad_Pro_9_7_Inch = "iPad Pro 9.7 Inch"
    case iPad_Pro_12_9_Inch = "iPad Pro 12.9 Inch"
    case iPad_Pro_12_9_Inch_2_Generation = "iPad Pro 12.9 Inch 2. Generation"
    case iPad_Pro_10_5_Inch = "iPad Pro 10.5 Inch"
    case apple_TV = "Apple TV"
    case apple_TV_4K = "Apple TV 4K"
    case homePod = "HomePod"
}

SharedFunctions.swift

import Foundation
import UIKit
func isDevice(_ name: DeviceName) -> Bool {
    let modelName = UIDevice.modelName.replacingOccurrences(of: "Simulator", with: "").trimmed()
    if name.rawValue == modelName {
        return true
    }

    return false
}

स्ट्रिंग + Whitespace.swift

import Foundation

extension String {
   public func trimmed() -> String {
    return self.trimmingCharacters(in: .whitespacesAndNewlines)
  }
}

5

चेक करेंट डिवाइस के लिए यह प्रयास करें iPhone या iPad:

स्विफ्ट 5

struct Device {
    static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad
    static let IS_IPHONE = UIDevice.current.userInterfaceIdiom == .phone
}

उपयोग:

if(Device.IS_IPHONE){
    // device is iPhone
}if(Device.IS_IPAD){
    // device is iPad (or a Mac running under macOS Catalyst)
}else{
    // other
}

3

स्विफ्ट 2.0 और iOS 7+ / iOS 8+ / iOS 9+

public class Helper {
    public class var isIpad:Bool {
        if #available(iOS 8.0, *) {
            return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Pad
        } else {
            return UIDevice.currentDevice().userInterfaceIdiom == .Pad
        }
    }
    public class var isIphone:Bool {
        if #available(iOS 8.0, *) {
            return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Phone
        } else {
            return UIDevice.currentDevice().userInterfaceIdiom == .Phone
        }
    }
}

उपयोग :

if Helper.isIpad {

}

या

guard Helper.isIpad else {
    return
} 

धन्यवाद @ user3378170


IOS 9 के लिए धन्यवाद @ user3378170
YannSteph

3

FYI करें, मैंने UI_USER_INTERFACE_IDIOM()स्विफ्ट में लिखे अपने ऐप के लिए उपयोग किया है । ऐप को XCode 6.3.1 के साथ अच्छी तरह से संकलित किया जा सकता है, उस आदेश पर किसी भी चेतावनी के बिना, सिम्युलेटर (किसी भी चयनित उपकरणों के साथ) और मेरे सभी वास्तविक उपकरणों (iPhone, iPad) पर iOS संस्करणों के साथ 7.1 से 8.3 तक अच्छा चलता है।

हालाँकि, ऐप Apple समीक्षकों के उपकरणों पर क्रैश हो गया (और मना कर दिया गया था)। आईट्यून्स कनेक्ट में कुछ और री-अपलोड के साथ समस्या का पता लगाने में मुझे कुछ दिन लग गए।

अब मैं UIDevice.currentDevice().userInterfaceIdiomइसके बजाय उपयोग करता हूं और मेरा ऐप ऐसे क्रैश से बच सकता है।


बिल्कुल सही। यह दुर्घटना करता है और मुझे इस मुद्दे का पता लगाने की कोशिश कर रहा है।
प्रवीण

जब भी मैंने अपने कोड में UI_USER_INTERFACE_IDIOM () का उपयोग किया, स्विफ्ट कंपाइलर क्रैश हो गया, बिना किसी त्रुटि संदेश के। बहुत अजीब।
tschoffelen

fwiw, Apple का डॉक अब बताता है कि "यदि आपका ऐप iOS 3.2 और बाद में चलता है, तो इसके बजाय userInterfaceIdiom का उपयोग करें।"
davew

1

यदि आप वर्तमान डिवाइस की जांच करना चाहते हैं कि उसका आईपैड या आईफोन है तो आप इन लाइन कोड का उपयोग कर सकते हैं:

 if(UIDevice.currentDevice().userInterfaceIdiom == .Pad){

  }else if(UIDevice.currentDevice().userInterfaceIdiom == .Phone){

  }

1

स्विफ्ट 3.0 :

let userInterface = UIDevice.current.userInterfaceIdiom

if(userInterface == .pad){
    //iPads
}else if(userInterface == .phone){
    //iPhone
}else if(userInterface == .carPlay){
    //CarPlay
}else if(userInterface == .tv){
    //AppleTV
}

1

उपरोक्त उत्तरों में कुछ जोड़ दिए गए हैं ताकि आपको स्ट्रिंग मान के बजाय एक प्रकार वापस मिल जाए।

मुझे लगा कि यह मुख्य रूप से यूआई समायोजन के लिए इस्तेमाल किया जा रहा है, इसलिए मैंने सभी उप मॉडल यानी आईफोन 5 एस को शामिल करना प्रासंगिक नहीं समझा, लेकिन इसे आसानी से मॉडल के परीक्षणों में जोड़कर बढ़ाया जा सकता है

शारीरिक और सिम्युलेटर उपकरणों के साथ स्विफ्ट 3.1 Xcode 8.3.2 में काम कर रहा है

कार्यान्वयन:

UIDevice.whichDevice()

public enum SVNDevice {
  case isiPhone4, isIphone5, isIphone6or7, isIphone6por7p, isIphone, isIpad, isIpadPro
}

extension UIDevice {
  class func whichDevice() -> SVNDevice? {
    let isDevice = { (comparision: Array<(Bool, SVNDevice)>) -> SVNDevice? in
      var device: SVNDevice?
      comparision.forEach({
        device = $0.0 ? $0.1 : device
      })
      return device
    }

    return isDevice([
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0, SVNDevice.isiPhone4),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0, SVNDevice.isIphone5),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0, SVNDevice.isIphone6or7),
      (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0, SVNDevice.isIphone6por7p),
      (UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0, SVNDevice.isIpad),
      (UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0, SVNDevice.isIpadPro)])
  }
}



private struct ScreenSize {
  static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width
  static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height
  static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
  static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

मैंने SVNBootstaper नामक एक फ्रेमवर्क बनाया है जिसमें यह और कुछ अन्य सहायक प्रोटोकॉल शामिल हैं, यह सार्वजनिक है और कार्थेज के माध्यम से उपलब्ध है।


0

IOS 13 के बाद से, UI_USER_INTERFACE_IDIOMपदावनत कर दिया गया है। यदि आपका कोड अभी भी है Obj-C, तो आप निम्नलिखित का उपयोग कर सकते हैं:

if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
    // device is iPad
}

कहाँ पे:

typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {
    UIUserInterfaceIdiomUnspecified = -1,
    UIUserInterfaceIdiomPhone API_AVAILABLE(ios(3.2)), // iPhone and iPod touch style UI
    UIUserInterfaceIdiomPad API_AVAILABLE(ios(3.2)), // iPad style UI
    UIUserInterfaceIdiomTV API_AVAILABLE(ios(9.0)), // Apple TV style UI
    UIUserInterfaceIdiomCarPlay API_AVAILABLE(ios(9.0)), // CarPlay style UI
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.