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); }
UIDevice
のuserInterfaceIdiom
は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 };
iPhoneとiPadの他に一応unspecifiedというのが定義されていますが、アプリの実装上用いることはほぼないでしょう。