Определение типа устройства

В моем приложении (написано в Objective-C), как определить, является ли устройство iPhone, iPad или iPhone5?

if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { // [iphone] or [itouch] } else { // [ipad] } 

вы можете легко обнаружить iphone, iphone5 и iPad с условием ниже (но не iTouch! iTouch рассматривается как если бы это был iPhone с этим кодом!): –

  if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone) { if ([[UIScreen mainScreen] bounds].size.height == 568) { } else { //iphone 3.5 inch screen } } else { //[ipad] } 

ОБНОВИТЬ

Вы также можете использовать MACRO или определить переменную для проверки, что iPhone5, iPhone4 или iPad, как Bellow: –

 #define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE #define isiPhone (UI_USER_INTERFACE_IDIOM() == 0)?TRUE:FALSE 

Пример:-

 if(isiPhone) { if (isiPhone5) { } else { //iphone 3.5 inch screen } } else { //[ipad] } 

Пожалуйста, проверьте код ниже:

UIDevice_enhanced.h

 @interface UIDevice (Enhanced) typedef enum { kUnknownPlatform = 0, kiPhone1G, kiPhone3G, kiPhone3GS, kiPhone4, kiPhone4Verizon, kiPhone4S, kiPhone5GSM, kiPhone5CDMA, kiPhone5CGSM, kiPhone5CCDMA, kiPhone5SGSM, kiPhone5SCDMA, kiPhone6, kiPhone6P, kiPhone6S, kiPhone6SP, kiPodTouch1G, kiPodTouch2G, kiPodTouch3G, kiPodTouch4G, kiPodTouch5G, kiPad, kiPad2Wifi, kiPad2GSM, kiPad2CMDA, kiPad3Wifi, kiPad3GSM, kiPad3CMDA, kiPad4Wifi, kiPad4GSM, kiPad4CMDA, kiPadAirWifi, kiPadAirCellular, kiPadMiniWifi, kiPadMiniGSM, kiPadMiniCDMA, kiPadMini2GWifi, kiPadMini2GCellular, kSimulator } PlatformType; - (NSString *) platformName; - (PlatformType) platform; @end 

UIDevice_enhanced.m

 #import "UIDevice_enhanced.h" #include  @interface UIDevice (Enhanced) - (NSString *) platformCode; @end @implementation UIDevice (Enhanced) // Utility method (private) - (NSString*) platformCode { struct utsname systemInfo; uname(&systemInfo); NSString* platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; return platform; } // Public method to use - (NSString*) platformName { NSString* platform = [self platformCode]; if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)"; if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus"; if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s"; if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G"; if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G"; if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G"; if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G"; if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G"; if ([platform isEqualToString:@"iPad1,1"]) return @"iPad"; if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)"; if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2 (GSM)"; if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)"; if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2 (WiFi)"; if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)"; if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini (GSM)"; if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)"; if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)"; if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)"; if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3 (GSM)"; if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)"; if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4 (GSM)"; if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)"; if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)"; if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)"; if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2G (WiFi)"; if ([platform isEqualToString:@"iPad4,5"]) return @"iPad mini 2G (Cellular)"; if ([platform isEqualToString:@"i386"]) return @"Simulator"; if ([platform isEqualToString:@"x86_64"]) return @"Simulator"; return platform; } // Public method to use - (PlatformType) platform { NSString *platform = [self platformCode]; if ([platform isEqualToString:@"iPhone1,1"]) return kiPhone1G; if ([platform isEqualToString:@"iPhone1,2"]) return kiPhone3G; if ([platform isEqualToString:@"iPhone2,1"]) return kiPhone3GS; if ([platform isEqualToString:@"iPhone3,1"]) return kiPhone4; if ([platform isEqualToString:@"iPhone3,2"]) return kiPhone4Verizon; if ([platform isEqualToString:@"iPhone4,1"]) return kiPhone4S; if ([platform isEqualToString:@"iPhone5,1"]) return kiPhone5GSM; if ([platform isEqualToString:@"iPhone5,2"]) return kiPhone5CDMA; if ([platform isEqualToString:@"iPhone5,3"]) return kiPhone5CGSM; if ([platform isEqualToString:@"iPhone5,4"]) return kiPhone5CCDMA; if ([platform isEqualToString:@"iPhone6,1"]) return kiPhone5SGSM; if ([platform isEqualToString:@"iPhone6,2"]) return kiPhone5SCDMA; if ([platform isEqualToString:@"iPhone7,1"]) return kiPhone6P; if ([platform isEqualToString:@"iPhone7,2"]) return kiPhone6; if ([platform isEqualToString:@"iPhone8,2"]) return kiPhone6SP; if ([platform isEqualToString:@"iPhone8,1"]) return kiPhone6S; if ([platform isEqualToString:@"iPod1,1"]) return kiPodTouch1G; if ([platform isEqualToString:@"iPod2,1"]) return kiPodTouch2G; if ([platform isEqualToString:@"iPod3,1"]) return kiPodTouch3G; if ([platform isEqualToString:@"iPod4,1"]) return kiPodTouch4G; if ([platform isEqualToString:@"iPod5,1"]) return kiPodTouch5G; if ([platform isEqualToString:@"iPad1,1"]) return kiPad; if ([platform isEqualToString:@"iPad2,1"]) return kiPad2Wifi; if ([platform isEqualToString:@"iPad2,2"]) return kiPad2GSM; if ([platform isEqualToString:@"iPad2,3"]) return kiPad2CMDA; if ([platform isEqualToString:@"iPad2,4"]) return kiPad2Wifi; if ([platform isEqualToString:@"iPad2,5"]) return kiPadMiniWifi; if ([platform isEqualToString:@"iPad2,6"]) return kiPadMiniGSM; if ([platform isEqualToString:@"iPad2,7"]) return kiPadMiniCDMA; if ([platform isEqualToString:@"iPad3,1"]) return kiPad3Wifi; if ([platform isEqualToString:@"iPad3,2"]) return kiPad3CDMA; if ([platform isEqualToString:@"iPad3,3"]) return kiPad3GSM; if ([platform isEqualToString:@"iPad3,4"]) return kiPad4Wifi; if ([platform isEqualToString:@"iPad3,5"]) return kiPad4GSM; if ([platform isEqualToString:@"iPad3,6"]) return kiPad4CDMA; if ([platform isEqualToString:@"iPad4,1"]) return kiPadAirWifi; if ([platform isEqualToString:@"iPad4,2"]) return kiPadAirCellular; if ([platform isEqualToString:@"iPad4,4"]) return kiPadMini2GWifi; if ([platform isEqualToString:@"iPad4,5"]) return kiPadMini2GCellular; if ([platform isEqualToString:@"i386"]) return kSimulator; if ([platform isEqualToString:@"x86_64"]) return kSimulator; return kUnknownPlatform; } @end 

Надеюсь, что это работает для вас…

 - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle { if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) { nibName = [NSString stringWithFormat:@"%@_568", nibName]; } if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { nibName = [NSString stringWithFormat:@"%@_iPad", nibName]; { } if (self = [super initWithNibName:nibName bundle:nibBundle]) { } return self; } 

Первое утверждение проверяет погоду на устройстве, которое у вас есть на iPhone 5 Screen.

Вторая проверка погоды вы используете iPad.

Третий возвращает обычный xib для iPhone 4 и ранее.

Обратите внимание: для выполнения этой работы вам нужно будет создать 3 разных XIB, все с другим суффиксом.

ViewController.xib

ViewController_568.xib

ViewController_iPad.xib

Вот куча констант, которые вы можете вставить в свой PCH-файл и использовать во всем своем приложении, что дает вам много разных вещей, которые вы можете проверить. (Широкоэкранный здесь означает iPhone 5 «более высокий» экран)

 #ifndef IS_WIDESCREEN #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) #endif #ifndef IS_IPHONE #define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) #endif #ifndef IS_IPOD #define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"]) #endif #ifndef IS_IPAD #define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@"iPad"]) #endif #ifndef IS_IPHONE5 #define IS_IPHONE5 (IS_WIDESCREEN && IS_IPHONE) #endif #ifndef IS_IPOD5 #define IS_IPOD5 (IS_WIDESCREEN && IS_IPOD) #endif 

Вы можете использовать его следующим образом:

 if(IS_IPHONE5){ // load iPhone5 code/nibs } if(IS_WIDESCREEN){ // load 4" screen stuff here } 
 if ([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) {//iPhone... (not iTouch or iPad) 

 if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]) {//iPad... 

 if (([[UIDevice currentDevice].model hasPrefix:@"iPhone"]) && ([UIScreen mainScreen]bounds].size.height == 568)) {//iPhone5... 

А также, только для справки … iTouch:

 if ([[UIDevice currentDevice].model hasPrefix:@"iPod"]) {//iTouch 
  • Предварительная буферизация для AVQueuePlayer
  • Что такое NSCFDictionary?
  • Проблема автосохранения кадра UICollectionViewCell contentView в ячейке прототипа Storyboard (Xcode 6, iOS 8 SDK) происходит при запуске только на iOS 7
  • Автоматически запускать локальные уведомления ежедневно в динамическое время, заданное в массивах. objective ios
  • Не удалось добавить объекты в NSMutableArray в Objective C
  • Как загрузить локальный html-файл в UIWebView
  • Поиск NSArray для значения соответствия значений
  • viewDidLoad в NSViewController?
  • Ошибка с NSJSONSerialization - Недопустимый тип записи JSON (меню)
  • Только два закругленных угла?
  • Чтение аудио сэмплов через AVAssetReader
  • Interesting Posts

    Метод проверки полосы пропускания / скорости между двумя уставками

    Что такое исключение NumberFormatException и как его исправить?

    Каковы преимущества Enhanced for loop и Iterator в Java?

    Эффективное добавление 128 бит с использованием флага переноса

    Почему сравнение double и float приводит к неожиданному результату?

    Ext2 или Ext4 для загрузочного USB-флеш-накопителя с Linux?

    CSV-анализ в Java – рабочий пример ..?

    Должен ли я создавать экземпляры переменных экземпляра в объявлении или в конструкторе?

    В чем разница между «Normal Reload», «Hard Reload» и «Empty Cache and Hard Reload» в Chrome?

    Почему Android Geocoder выбрасывает исключение «Service not Available»?

    Как я могу установить значение моего подключения eth0 при запуске?

    Список аргументов слишком длинный для команд rm, cp, mv

    Многочисленные столбцы iPhone в UITableView

    Как Java разрешает относительный путь в новом файле ()?

    Угловое 2 – Что эквивалентно корневой области?

    Давайте будем гением компьютера.