Определение типа устройства
В моем приложении (написано в Objective-C), как определить, является ли устройство iPhone, iPad или iPhone5?
if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { // [iphone] or [itouch] } else { // [ipad] }
- Формат NSDate, выводящий неверную дату
- С ARC, что лучше: alloc или autorelease инициализаторы?
- Ошибка модуля сборки iOS8 для Facebook для FBSDKCoreKit
- Тип аксессуара UITableViewCell, проверенный на доступ и установка других непроверенных
- Убедитесь, что вход в UITextField только числовой
- Как заполнить фоновое изображение UIView
- applicationWillEnterForeground против applicationDidBecomeActive, applicationWillResignActive vs. applicationDidEnterBackground
- запись NSDictionary для plist в моем приложении
- Измените первый символ в каждом слове строки на верхний регистр.
- создать подclass uibutton
- Как добавить UIView над текущим UITableViewController
- Msgstr "wait_fences: не удалось получить ответ: 10004003"?
- Предупреждать, когда не вызывается
вы можете легко обнаружить 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