답변:
기기가 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 솔루션에 대해서는 다음 답변을 참조하십시오 : https://stackoverflow.com/a/27517536/2057171
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
Swift 에서는 다음과 같은 평등을 사용하여 Universal 앱 의 장치 종류 를 결정할 수 있습니다 .
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
}
userInterfaceIdiom
는 'iOS 3.2 이상에서 사용 가능' 이라고 말합니다 . 문제가되지 않아야합니다.
.Phone
대신에 반환 됩니다 .Pad
.
이것은 iOS 3.2부터 UIDevice의 일부입니다. 예 :
[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
Xcode의 Simulator에서 일부 솔루션이 작동하지 않는 것으로 나타났습니다. 대신, 이것은 작동합니다 :
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")
}
또한 Xcode의 '기타 예제'에서 장치 모델은 'iPad Simulator'로 다시 표시되므로 위의 조정을 통해 정렬해야합니다.
hasSuffix:@"iPad"
대신 사용할 수있는 경우 isEqualToString@"iPad"
... 가장 좋은 방법은 시뮬레이터가 반환하고 이동하는 장치 모델을 기록하는 것입니다 거기에서 ...
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 또는 Universal 용인 경우에만 iPad를 반환합니다. iPad에서 실행되는 iPhone 앱인 경우에는 그렇지 않습니다. 따라서 모델을 대신 확인해야합니다. :
class func isUserUsingAnIpad() -> Bool {
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
return true
} else {
return false
}
}
아래의 스 니펫은 클래스가를 상속하지 않으면 컴파일되지 않으며 UIViewController
그렇지 않으면 제대로 작동합니다. 에 관계없이 UI_USER_INTERFACE_IDIOM()
앱을 아이 패드 또는 유니버설을위한 경우에만 아이 패드를 반환합니다. iPad에서 실행되는 iPhone 앱인 경우에는 그렇지 않습니다. 따라서 모델을 대신 확인해야합니다. :
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
*
스위프트 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
}
많은 답변이 좋지만 스위프트 4에서 이와 같이 사용합니다.
상수 만들기
struct App {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
이런 식으로 사용
if App.isRunningOnIpad {
return load(from: .main, identifier: identifier)
} else {
return load(from: .ipad, identifier: identifier)
}
편집 : 제안 Cœur 단순히 UIDevice에 확장을 만들
extension UIDevice {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
App
똑같이 할 수있을 때 왜 구조체를 귀찮게 UIDevice
합니까?
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");
}
["I am not an iPad" rangeOfString:@"iPad"].location != NSNotFound
true를 반환합니다.
또 다른 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's an iPhone!
}
if UIDevice.type == iPad {
//it's an iPad!
}
if UIDevice.type == TV {
//it's an TV!
}
에서 스위프트 4.2 및 엑스 코드 (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
}
왜 그렇게 복잡한가? 이것이 내가하는 방법입니다 ...
스위프트 4 :
var iPad : Bool {
return UIDevice.current.model.contains("iPad")
}
이렇게하면 그냥 말할 수 있습니다 if iPad {}
최신 버전의 iOS의 경우 다음을 추가하기 만하면됩니다 UITraitCollection
.
extension UITraitCollection {
var isIpad: Bool {
return horizontalSizeClass == .regular && verticalSizeClass == .regular
}
}
그런 다음 UIViewController
확인하십시오 :
if traitCollection.isIpad { ... }
UI_USER_INTERFACE_IDIOM()
와 같습니다([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)
. 어딘가에 결과를 캐싱하는 것이 좋습니다BOOL iPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; … if (iPad) …
.