Interface Builderを使わずにTab Bar Application

Interface Builderを使わずにTab Bar Applicationを作成する方法です。
意外に忘れやすいので、メモをしておきます。
(環境はXcode4です)

  1. Window-based Applicationでプロジェクト作成
  2. MainWindow.xibを削除
  3. プロジェクトの設定->InfoからMain nib file base nameを削除
  4. main.mを以下のように変更
int retVal = UIApplicationMain
  (argc, argv, nil, @"TabWithoutIBAppDelegate");
  1. TabWithoutIBAppDelegate.h
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UITabBarController *tabBarController;
  1. TabWithoutIBAppDelegate.m
@synthesize window = _window;
@synthesize tabBarController = _tabBarController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 階層的に最も下に位置するwindowを生成
    _window = [[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]];
    _tabBarController = [[UITabBarControlleralloc] init];

    // TabBarControllerに加える3つのViewController
    ViewController1 *controller1 = [[ViewController1 alloc] init];
    UIViewController *controller2 = [[UIViewController alloc] init];
    UIViewController *controller3 = [[UIViewController alloc] init];
    
    self.tabBarController.viewControllers = 
        [NSArrayarrayWithObjects:controller1, controller2, controller3, nil];
    
    [controller1 release];
    [controller2 release];
    [controller3 release];
    
    [self.windowaddSubview:self.tabBarController.view];
    [self.windowmakeKeyAndVisible];
    returnYES;
}

- (void)dealloc
{
    [_tabBarControllerrelease];
    [_windowrelease];
    [superdealloc];
}
  1. UIViewControllerを追加する
    実際の開発ではUIViewControllerを自作する必要があります。今回はIBを使わないのでloadViewでデザインをします。
- (void)loadView
{
    [superloadView];
    
    self.view.backgroundColor = [UIColorwhiteColor];
    
    UITextView *text = [[UITextView alloc] 
        initWithFrame:CGRectMake(0, 0, 100, 100)];
    [self.view addSubview:text];
    1;
}