ব্যবহারকারী আইপ্যাডে থাকলে আইওএস সনাক্ত করে


260

আমার একটি অ্যাপ্লিকেশন রয়েছে যা আইফোন এবং আইপড টাচে চলে, এটি রেটিনা আইপ্যাড এবং সমস্ত কিছুতে চালাতে পারে তবে একটি সমন্বয় হওয়া দরকার। আমার বর্তমান ডিভাইসটি আইপ্যাড কিনা তা সনাক্ত করতে হবে। ব্যবহারকারী আমার মধ্যে একটি আইপ্যাড ব্যবহার করছে UIViewControllerএবং তারপরে সে অনুযায়ী কিছু পরিবর্তন করছে কিনা তা সনাক্ত করতে আমি কোন কোড ব্যবহার করতে পারি ?

উত্তর:


589

কোনও ডিভাইস আইপ্যাড কিনা তা পরীক্ষা করার বেশ কয়েকটি উপায় রয়েছে। ডিভাইসটি আসলে আইপ্যাড কিনা তা যাচাই করার জন্য এটি আমার প্রিয় উপায়:

if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
    return YES; /* Device is iPad */
}

আমি যেভাবে এটি ব্যবহার করি

#define IDIOM    UI_USER_INTERFACE_IDIOM()
#define IPAD     UIUserInterfaceIdiomPad

if ( IDIOM == IPAD ) {
    /* do something specifically for iPad. */
} else {
    /* do something specifically for iPhone or iPod touch. */
}   

অন্যান্য উদাহরণ

if ( [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] ) {
    return YES; /* Device is iPad */
}

#define IPAD     (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
if ( IPAD ) 
     return YES;

একটি সুইফ্ট সমাধানের জন্য, এই উত্তরটি দেখুন: https://stackoverflow.com/a/27517536/2057171


23
আপনি যেভাবে এটি ব্যবহার করছেন তেমন দক্ষ নয়। UI_USER_INTERFACE_IDIOM()সমতূল্য ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)। আপনি ফলাফলের কোথাও ক্যাশে ভালো হতে পারে: BOOL iPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; … if (iPad) …
মার্সেলো ক্যান্টোস

7
আমি আপনার শেষ পদ্ধতিতে ইক্যুয়েলটোস্ট্রিংয়ের চেয়ে হেসপ্রিফিক্স ব্যবহার করব। এই পদ্ধতিতে কোডটি সিমুলেটারেও কাজ করে।
এলবিল্ড

18
সুইফট:if UIDevice.currentDevice().userInterfaceIdiom == .Pad
পাইং

2
গৌরবময় ম্যাক্রোর ব্যবহার। আপনার কোড অবলম্বন করার দুর্দান্ত উপায়।
gnasher729

2
@ gnasher729 500+ লোক আপনার সাথে একমত নন। স্পর্শকাতর মন্তব্যের পরিবর্তে আপনি কেন নিজের উত্তর সরবরাহ করবেন না কারণ আপনি মনে করেন এটি করার আরও ভাল উপায় আছে।
রাইটসিসিএস

162

ইন সুইফট আপনি নির্ধারণ করতে নিম্নলিখিত equalities, ব্যবহার করতে পারেন ডিভাইস ধরনের ইউনিভার্সাল অ্যাপ্লিকেশান করুন:

UIDevice.current.userInterfaceIdiom == .phone
// or
UIDevice.current.userInterfaceIdiom == .pad

ব্যবহারের পরে কিছু হবে:

if UIDevice.current.userInterfaceIdiom == .pad {
    // Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified
    // Implement your logic here
}

3
আমি স্বীকৃত উত্তরে আপনার উত্তরের একটি লিঙ্ক সম্পাদনা করছি। (এইভাবে আপনিও creditণ পান)। যদিও এটি একটি উদ্দেশ্য-সি প্রশ্ন, এই প্রশ্নটি দেখার জন্য প্রচুর লোকেরা গুগল থেকে আসছে এবং একটি সুইফ্ট সমাধানের সন্ধান করতে পারে! : ডি
অ্যালবার্ট রেনশওয়া

1
আপনাকে ধন্যবাদ, অ্যালবার্ট রেনশো। আমিও তাই ভেবেছিলাম. :) বিটিডব্লিউ: আমি মনে করি না যে প্রশ্নের উদ্দেশ্যটি উদ্দেশ্যমূলক-সি সম্পর্কে বিশেষত জিজ্ঞাসা করা হয়েছিল, তবে আইওএসের জন্য (যা সেই মুহুর্তে ওবজ-সি ছিল)। কমপক্ষে আমি সুইফটের জন্যও এই প্রশ্নের উত্তর খুঁজে পেতে পারব বলে আশা করি।
জিহুত

হাই @sevensevens, আপনার মতামতের জন্য আপনাকে ধন্যবাদ। আমি কেবল এটি চেষ্টা করেছি এবং এটি এক্সকোড 7.2 সিমুলেটারে আইওএস 9 লক্ষ্য করে আমার জন্য কাজ করেছিল। আপনি এক্সকোডের কোন সংস্করণ ব্যবহার করছেন? পুরানো এক্সকোডগুলিতে এটি কাজ করে না? দস্তাবেজগুলি বলে userInterfaceIdiomযে 'আইওএস 3.2 এবং তারপরে পাওয়া যায়।' যাতে সমস্যা হওয়া উচিত নয়।
জীহুত

অথবা এটি এমনও হতে পারে যে আপনি আইপ্যাড সিমুলেটারে কেবল একটি আইফোন চালাচ্ছেন? সেক্ষেত্রে বিভ্রান্তিটি ব্যাখ্যা করবে - তবে বাস্তব ডিভাইসগুলিতেও এটি এমনভাবে আচরণ করা উচিত বলে আমি মনে করি। @ ইউনূস নেদিম মেহেল @ রিচার্ডসের মন্তব্যে উল্লেখ করেছেন যে উত্তর .Phoneপরিবর্তে পরিস্থিতি ফিরে আসবে .Pad
Jeehut

দুঃখিত - সিমুলেটর আইফোন সেট ছিল।
26am '1515

35

এটি আইওএস ডিভাইসের অংশ হিসাবে আইওএস ৩.২, যেমন:

[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad

4
আইডিয়ামটি সাধারণত ভাল তবে আপনি যদি আইপ্যাডে আইফোন অ্যাপ্লিকেশন চালাচ্ছেন তবে এটি ইউআইউসারআইন্টারফেস আইডিওম ফোনটি ফিরিয়ে দেবে।
ইউনূস নেদিম মেহেল

25

আপনি এটি ব্যবহার করতে পারেন

#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
   // iPad
} else {
   // iPhone / iPod Touch
}

24

UI_USER_INTERFACE_IDIOM()অ্যাপ্লিকেশনটি আইপ্যাড বা ইউনিভার্সালের জন্য হলে কেবল আইপ্যাড ফেরত দেয়। যদি এটির আইফোন অ্যাপটি কোনও আইপ্যাডে চলমান থাকে তবে তা হবে না। সুতরাং আপনি পরিবর্তে মডেল চেক করা উচিত।


15

সাবধানতা অবলম্বন করুন: যদি আপনার অ্যাপ্লিকেশনটি কেবল আইফোন ডিভাইসকেই লক্ষ্য করে তুলছে, তবে আইফোন সামঞ্জস্যপূর্ণ মোডের সাথে চলমান আইপ্যাড নীচের বিবৃতিতে মিথ্যা ফিরিয়ে দেবে:

#define IPAD     UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

শারীরিক আইপ্যাড ডিভাইস সনাক্ত করার সঠিক উপায় হ'ল:

#define IS_IPAD_DEVICE      ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])

15

আমি দেখতে পেয়েছি যে এক্সকোডের মধ্যে সিমুলেটারে কিছু সমাধান আমার পক্ষে কাজ করে না। পরিবর্তে, এটি কাজ করে:

ObjC

NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;

if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) {
    DebugLog(@"iPad");
} else {
    DebugLog(@"iPhone or iPod Touch");
}

দ্রুতগতি

if UIDevice.current.model.hasPrefix("iPad") {
    print("iPad")
} else {
    print("iPhone or iPod Touch")
}

এক্সকোডের 'অন্যান্য উদাহরণগুলিতে' ডিভাইস মডেলটি আবার 'আইপ্যাড সিমুলেটর' হিসাবে ফিরে আসে তাই উপরের টুইটগুলি সেইভাবে সাজিয়ে নেওয়া উচিত।


সম্ভবত অ্যাপল "আইপ্যাড সিমুলেটর" বা "আইপ্যাড ২.১" বা কিছু বলার জন্য সিমুলেটর আপডেট করেছে ... যদি এমনটি হয় তবে আপনি তার hasSuffix:@"iPad"পরিবর্তে ব্যবহার করতে পারেন isEqualToString@"iPad"... আপনার সেরা বেটটি সেই ডিভাইস মডেলটি লগইন করুন যা সিমুলেটর ফিরে আসে এবং যায় সেখান থেকে ...
অ্যালবার্ট রেনশওয়া

8

করতে যে অনেক উপায়ে সুইফট :

আমরা নীচের মডেলটি পরীক্ষা করি (আমরা কেবল এখানে কেস সংবেদনশীল অনুসন্ধান করতে পারি):

class func isUserUsingAnIpad() -> Bool {
    let deviceModel = UIDevice.currentDevice().model
    let result: Bool = NSString(string: deviceModel).containsString("iPad")
    return result
}

আমরা নীচের মডেলটি পরীক্ষা করি (আমরা এখানে সংবেদনশীল / সংবেদনশীল অনুসন্ধান করতে পারি):

    class func isUserUsingAnIpad() -> Bool {
        let deviceModel = UIDevice.currentDevice().model
        let deviceModelNumberOfCharacters: Int = count(deviceModel)
        if deviceModel.rangeOfString("iPad",
                                     options: NSStringCompareOptions.LiteralSearch,
                                     range: Range<String.Index>(start: deviceModel.startIndex,
                                                                end: advance(deviceModel.startIndex, deviceModelNumberOfCharacters)),
                                     locale: nil) != nil {
            return true
        } else {
            return false
        }
   }

UIDevice.currentDevice().userInterfaceIdiomনীচে কেবল অ্যাপলটি আইপ্যাড বা ইউনিভার্সালের জন্য হলে আইপ্যাড ফেরত দেয়। যদি এটি কোনও আইফোনের অ্যাপ্লিকেশন কোনও আইপ্যাডে চালিত হয় তবে তা হবে না। সুতরাং আপনি পরিবর্তে মডেল চেক করা উচিত। :

    class func isUserUsingAnIpad() -> Bool {
        if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
            return true
        } else {
            return false
        }
   }

ক্লাসটি কোনওটির উত্তরাধিকারী না হলে নীচের এই স্নিপেটটি সংকলন করে না UIViewController, অন্যথায় এটি ঠিক কাজ করে। তথাপি UI_USER_INTERFACE_IDIOM()শুধুমাত্র আইপ্যাড ফেরৎ যদি অ্যাপ্লিকেশন আইপ্যাড বা ইউনিভার্সাল জন্য। যদি এটি কোনও আইফোনের অ্যাপ্লিকেশন কোনও আইপ্যাডে চালিত হয় তবে তা হবে না। সুতরাং আপনি পরিবর্তে মডেল চেক করা উচিত। :

class func isUserUsingAnIpad() -> Bool {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
        return true
    } else {
        return false
    }
}

2
আমি মনে করি না, ওবজেক্টিভ-সি ট্যাগটি করা প্রশ্নগুলির পুরানো উত্তরগুলি পুনরায় লেখার দরকার আছে।
খ্রিস্টান শ্নোনার

4
আমি স্পষ্টভাবে মনে করি যে আমার উত্তরটি দরকারী কারণ প্রথমত সমস্ত উত্তর স্ট্যাক ওভারফ্লোতে ছড়িয়ে ছিটিয়ে রয়েছে। দ্বিতীয়ত আইওএসের পুরানো সংস্করণগুলির সাথে যা কাজ করেছে তা কখনও কখনও আইওএস 8 এবং ততোধিকের সাথে সঠিকভাবে কাজ করে না। সুতরাং আমি এই সমাধানগুলি পরীক্ষা করেছি এবং এই উত্তরটি অত্যন্ত কার্যকর হতে পারে। তাই আমি আপনার সাথে মোটেও একমত নই।
কিং-উইজার্ড

এর উপরে সিনফ্যাক্সটি সুইফটে আলাদা। সুতরাং উত্তরের একটি বুদ্ধিমান কপির পেস্ট করা এবং নির্দিষ্ট আপ-টু-ডেট বাদাম এবং बोल্টগুলি বোঝার জন্য প্রত্যেকের পক্ষে সর্বদা কার্যকর।
কিং-উইজার্ড


8

*

দ্রুত 3.0

*

 if UIDevice.current.userInterfaceIdiom == .pad {
        //pad
    } else if UIDevice.current.userInterfaceIdiom == .phone {
        //phone
    } else if UIDevice.current.userInterfaceIdiom == .tv {
        //tv
    } else if UIDevice.current.userInterfaceIdiom == .carPlay {
        //CarDisplay
    } else {
        //unspecified
    }

8

অনেক উত্তর ভাল তবে আমি সুইফট 4-এ এই জাতীয় ব্যবহার করি

  1. কনস্ট্যান্ট তৈরি করুন

    struct App {
        static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
    }
  2. এই মত ব্যবহার করুন

    if App.isRunningOnIpad {
        return load(from: .main, identifier: identifier)
    } else {
        return load(from: .ipad, identifier: identifier)
    }

সম্পাদনা করুন: প্রস্তাবিত সিউর ইউআইডেভাইসটিতে কেবল একটি এক্সটেনশন তৈরি করে

extension UIDevice {
    static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}

3
Appযখন আপনি কোনও UIDeviceএক্সটেনশান দিয়ে একই কাজ করতে পারেন তখন কোনও স্ট্রাক্ট নিয়ে কেন বিরক্ত করছেন ?
সিউর

3

আইপ্যাড শব্দটি বিদ্যমান রয়েছে তা দেখতে আপনি রেঞ্জ অফ স্ট্রিংটি পরীক্ষা করতে পারেন।

NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;

if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound)  {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}

["I am not an iPad" rangeOfString:@"iPad"].location != NSNotFoundসত্য ফিরে।
সিউর

2

তবুও অন্য সুইফটি উপায়:

//MARK: -  Device Check
let iPad = UIUserInterfaceIdiom.Pad
let iPhone = UIUserInterfaceIdiom.Phone
@available(iOS 9.0, *) /* AppleTV check is iOS9+ */
let TV = UIUserInterfaceIdiom.TV

extension UIDevice {
    static var type: UIUserInterfaceIdiom 
        { return UIDevice.currentDevice().userInterfaceIdiom }
}

ব্যবহার:

if UIDevice.type == iPhone {
    //it's an iPhone!
}

if UIDevice.type == iPad {
    //it's an iPad!
}

if UIDevice.type == TV {
    //it's an TV!
}

2

ইন সুইফট 4.2 এবং Xcode 10

if UIDevice().userInterfaceIdiom == .phone {
    //This is iPhone
} else if UIDevice().userInterfaceIdiom == .pad { 
    //This is iPad
} else if UIDevice().userInterfaceIdiom == .tv {
    //This is Apple TV
}

আপনি যদি নির্দিষ্ট ডিভাইস সনাক্ত করতে চান

let screenHeight = UIScreen.main.bounds.size.height
if UIDevice().userInterfaceIdiom == .phone {
    if (screenHeight >= 667) {
        print("iPhone 6 and later")
    } else if (screenHeight == 568) {
        print("SE, 5C, 5S")
    } else if(screenHeight<=480){
        print("4S")
    }
} else if UIDevice().userInterfaceIdiom == .pad { 
    //This is iPad
}

1

এত জটিল কেন? এইভাবে আমি এটি ...

সুইফট 4:

var iPad : Bool {
    return UIDevice.current.model.contains("iPad")
}

এইভাবে আপনি বলতে পারেন if iPad {}


1
দ্রষ্টব্য: এই প্রশ্নটি 2012 সালে জিজ্ঞাসা করা হয়েছিল
অ্যালবার্ট রেনশো

0

আইওএসের সর্বশেষতম সংস্করণগুলির জন্য, কেবল যুক্ত করুন UITraitCollection:

extension UITraitCollection {

    var isIpad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }
}

এবং তারপরে UIViewControllerকেবল পরীক্ষা করুন:

if traitCollection.isIpad { ... }

4
যখন আইপ্যাড-অ্যাপ্লিকেশনটি স্প্লিট স্ক্রিন মোডে থাকে তখন কি এটি কার্যকর হয়? তাহলে অনুভূমিক আকারের শ্রেণিটি সংক্ষিপ্ত হবে।
অলিভার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.