ViewControllerのiPhone/iPadユニバーサル化

iPhoneiPadでほとんど同じ画面を実装する際に、
今までは.h、.m、.xibファイルをそれぞれ個別に作成していました。

機能や操作はほとんど同じなのに、ただレイアウトが
iPhoneiPadで異なる、という状況でこのようにしてました。

しかし実は、別々にするのはxibファイルだけで良かったことが分かりました。

  • 共通
    • MyViewController.h
    • MyViewController.m
  • iPhone
  • iPad
    • MyViewController_iPad.xib

この場合、ViewControllerのインスタンスは、以下のように生成することになります。

MyViewController *viewController;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController_iPhone" bundle:nil] autorelease];
} else {
    viewController = [[[MyViewController alloc] initWithNibName:@"MyViewController_iPad" bundle:nil] autorelease];
}

こうすることで、レイアウトのみ別々のxibファイルで指定出来て、
機能や操作の実装は共通化出来るので良いですね。