在我的应用程序(用 Objective-C 编写)中,我如何检测设备是 iPhone、iPad 还是 iPhone5?
if([[UIDevice currentDevice]userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
// [iphone] or [itouch]
} else {
// [ipad]
}
在我的应用程序(用 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 <sys/utsname.h>
@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
希望这对你有用...
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
- (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 屏幕。
第二个检查您使用 iPad 的天气。
第三个返回 iPhone 4s 和之前的正常 xib。
请注意,要完成这项工作,您必须创建 3 个不同的 XIB,它们都具有不同的后缀。
视图控制器.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
}