web-dev-qa-db-ja.com

ユーザーがiPadを使用しているかどうかをiOSが検出

私はiPhoneとiPod Touchで動くアプリを持っています、それはRetina iPadと全ての上で動くことができますが、調整が1つ必要です。現在のデバイスがiPadかどうかを検出する必要があります。ユーザーが自分のUIViewControllerでiPadを使用しているかどうかを検出し、それに応じて何かを変更するために使用できるコードは何ですか?

233
Albert Renshaw

デバイスが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

564
WrightsCS

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
}
137
Dschee

これは、iOS 3.2以降のUIDeviceの一部です。

[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
33
Richard

これも使えます

#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
   // iPad
} else {
   // iPhone / iPod Touch
}
25
Chilly

アプリがiPadまたはUniversal用の場合は、UI_USER_INTERFACE_IDIOM()はiPadのみを返します。 iPhoneアプリがiPadで実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。

19
malhal

注意してください:あなたのアプリがiPhoneデバイスのみをターゲットにしている場合、iphone互換モードで実行されているiPadは以下のステートメントではfalseを返します。

#define IPAD     UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

物理的なiPadデバイスを検出する正しい方法は次のとおりです。

#define IS_IPAD_DEVICE      ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
14
peak

私は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 Simulator」として返されるため、上記のTweakはそれを解決するはずです。

11
Andy Davies

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を返します。 iPhoneアプリがiPad上で実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。 :

    class func isUserUsingAnIpad() -> Bool {
        if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
            return true
        } else {
            return false
        }
   }

以下のこのスニペットは、クラスがUIViewControllerを継承していない場合はコンパイルされません。それ以外の場合は正常に動作します。 UI_USER_INTERFACE_IDIOM()は、アプリがiPadまたはUniversal用の場合にのみiPadを返します。 iPhoneアプリがiPad上で実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。 :

class func isUserUsingAnIpad() -> Bool {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
        return true
    } else {
        return false
    }
}
8
King-Wizard

*

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
    }
7
Ashok R

多くの回答は良いですが、私はSwift 4ではこのように使っています

  1. 定数を作成

    struct App {
        static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
    }
    
  2. こんな感じ

    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

}

4
Rohit Sisodia

このようにiPadが存在することを確認するためにrangeOfStringをチェックすることができます。

NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;

if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound)  {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}
3
LearningGuy

さらにもう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!
}
2
Aviel Gross

なぜそんなに複雑なのですか?これが私のやり方です...

Swift 4:

var iPad : Bool {
    return UIDevice.current.model.contains("iPad")
}

こうすればif iPad {}と言うことができます

1
The Ruffus

In Swift 4.2 and 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
}
0
iOS

最新バージョンのiOSの場合は、単にUITraitCollectionを追加します。

extension UITraitCollection {

    var isIpad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }
}

そしてUIViewController内で次のことをチェックしてください。

if traitCollection.isIpad { ... }
if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
 {
            print("This is iPad")
 }else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
 {
            print("This is iPhone");
  }
0
Rajesh Sharma