IOS обнаруживает, что пользователь находится на iPad

У меня есть приложение, которое работает на iPhone и iPod Touch, оно может работать на iPad Retina и все, но должна быть одна настройка. Мне нужно определить, является ли текущее устройство iPad. Какой код я могу использовать, чтобы определить, использует ли пользователь iPad в моем UIViewController, а затем что-то изменить?

Ответ 1

Существует несколько способов проверить, является ли устройство iPad. Это мой любимый способ проверить, действительно ли устройство является iPad:

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;

Для решения Swift см. этот ответ: fooobar.com/questions/33212/...

Ответ 2

В Swift вы можете использовать следующие равенства, чтобы определить тип устройства:

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

Это часть UIDevice с iOS 3.2, например:

[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad

Ответ 4

Вы также можете использовать этот

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

Ответ 5

UI_USER_INTERFACE_IDIOM() возвращает iPad только в том случае, если приложение предназначено для iPad или Universal. Если его приложение iPhone работает на iPad, это не будет. Поэтому вы должны проверить модель.

Ответ 6

Я обнаружил, что это не сработало для меня в симуляторе в Xcode 4.5

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

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

Также в "Other Examples" в Xcode модель устройства возвращается как "iPad Simulator", поэтому вышеупомянутая настройка должна сортировать ее.

Ответ 7

Будьте осторожны: если ваше приложение предназначено только для устройства iPhone, iPad, работающий с совместимым с iphone режимом, вернет false для инструкции ниже:

#define IPAD     UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

Правильный способ обнаружения физического устройства iPad:

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

Ответ 8

Много способов сделать это в Swift:

Мы проверяем приведенную ниже модель (мы можем делать только чувствительный к регистру поиск):

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 ниже только возвращает iPad, если приложение предназначено для iPad или Universal. Если это приложение для iPhone, запущенное на iPad, то этого не произойдет. Поэтому вы должны проверить модель.

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

Этот фрагмент ниже не компилируется, если класс не наследует UIViewController, в противном случае он работает нормально. Независимо от того, что UI_USER_INTERFACE_IDIOM() возвращает iPad, если приложение предназначено для iPad или Universal. Если это приложение для iPhone, запущенное на iPad, то этого не произойдет. Поэтому вы должны проверить модель.

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

Ответ 9

*

В быстрой версии 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
    }

Ответ 10

Вы можете проверить rangeOfString, чтобы увидеть, что iPad существует именно так.

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

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

Ответ 11

Еще один метод Swifty:

//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 an iPhone!
}

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

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

Ответ 12

Для последних версий iOS просто добавьте UITraitCollection:

extension UITraitCollection {

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

а затем внутри UIViewController просто проверьте:

if traitCollection.isIpad { ... }

Ответ 13

if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
 {
            print("This is iPad")
 }else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
 {
            print("This is iPhone");
  }

Ответ 14

Почему так сложно? Вот как я это делаю...

Swift 4:

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

Таким образом вы можете просто сказать if iPad {}

Ответ 15

РЕДАКТИРОВАТЬ: Настоящий iPhone X возвращает идиомный телефон, так что это всего лишь ошибка в симуляторе.

iPhoneX возвращает idiom iPad (по крайней мере, в симуляторе, реальное устройство поступит в продажу через пару дней), хотя это iPhone. Поэтому правильным ответом является использование имени устройства.

Swift 4:

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

Obj-C:

- (BOOL)iPad {
  return ([deviceModel rangeOfString:@"iPad"].location != NSNotFound
}