おすしたべたい

おすしがたくさん食べられるようにがんばるブログ

iPhoneかiPadかを判別して処理を分岐させる

表題の通り。
スーパー基本的なことだけども。今までiPad対応をしたことなかったので実装したことなかったけど、必要に駆られ調べたのでメモ。

ということで下記。UI_USER_INTERFACE_IDIOM()という関数でチェックできる模様です。

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    // iPhone用の処理
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // iPad用の処理
}

UI_USER_INTERFACE_IDIOM()を調べてみるとUIDeviceのヘッダにインライン関数が定義されていました。

static inline UIUserInterfaceIdiom UI_USER_INTERFACE_IDIOM() {
    return ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ?
            [[UIDevice currentDevice] userInterfaceIdiom] :
            UIUserInterfaceIdiomPhone);
}

UIDeviceuserInterfaceIdiomはiOS3.2以降からのメソッドなので、それに対応しているということなのですね。おそらくこのタイミングで初代iPadが発売されたのでしょう。

戻り値はUIUserInterfaceIdiom。定義は下記です。

typedef NS_ENUM(NSInteger, UIUserInterfaceIdiom) {
    UIUserInterfaceIdiomUnspecified = -1,
#if __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED
    UIUserInterfaceIdiomPhone,           // iPhone and iPod touch style UI
    UIUserInterfaceIdiomPad,             // iPad style UI
#endif
};

iPhoneiPadの他に一応unspecifiedというのが定義されていますが、アプリの実装上用いることはほぼないでしょう。