私はiPhoneとiPod Touchで動作するアプリを持っています。それはRetina iPadとすべてで動作しますが、1つの調整が必要です。現在のデバイスがiPadかどうかを検出する必要があります。ユーザーが私の中UIViewController
でiPadを使用しているかどうかを検出し、それに応じて何かを変更するには、どのコードを使用できますか?
私はiPhoneとiPod Touchで動作するアプリを持っています。それはRetina iPadとすべてで動作しますが、1つの調整が必要です。現在のデバイスがiPadかどうかを検出する必要があります。ユーザーが私の中UIViewController
でiPadを使用しているかどうかを検出し、それに応じて何かを変更するには、どのコードを使用できますか?
回答:
デバイスが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
でスウィフトあなたは決定するには、次の等式を使用することができ、デバイスの種類をユニバーサルアプリに:
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内のシミュレータでは、一部のソリューションが機能しないことがわかりました。代わりに、これは機能します:
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シミュレーター」として返されるため、上記の微調整で整理する必要があります。
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またはUniversal用の場合にのみiPadを返します。iPadで実行されているiPhoneアプリの場合は、実行されません。したがって、代わりにモデルを確認する必要があります。:
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
*
Swift 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)
}
編集: 推奨通り、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を返します。
さらにもう1つの方法:
//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とXcode 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) …
。