InterfaceBuilderを利用しないプロジェクトの作成:Xcode3編

Xcode3環境でInterfaceBuilderを利用しないプロジェクトの作成方法について解説します。

作成手順の概要

InterfaceBuilderを利用しないプロジェクトを作成するには、以下の操作を行います。

  • xibファイルを削除
  • plistのnibファイル定義を削除
  • アプリケーションDelegateやViewControllerを明示的に生成する

具体的な操作手順は次の通りです。

1.プロジェクトを作成する

Xcode3でiPhone用のView-based Applicationプロジェクトを新規作成します。

図1:プロジェクトの新規作成
図1:プロジェクトの新規作成

2.xibファイルを削除する

InterfaceBuilder用のxibファイルをプロジェクトから削除します。プロジェクトのResourcesグループにある、(プロジェクト名)ViewController.xibとMainWindow.xibを削除します。

図2:削除するxibファイルを選択
図2:削除するxibファイルを選択

3.nibファイルの定義を削除する

プロジェクトのplistファイルから、nibファイルの定義を削除します。nibファイルはxibファイルから生成されるファイルで、画面に表示するWindow/ViewController/Viewなどを格納しています。手順「2.」でxibファイルを削除したので、合わせてnibファイルを利用しないようにplistファイルを修正します。

nibファイルの定義は「Main nib file base name」キーで定義されています。Xcodeでプロジェクトのplistファイルを開き、「Main nib file base name」項目を選択した状態でdeleteキーを押下して定義を削除します。

図3:削除するnibファイルの定義を選択
図3:削除するnibファイルの定義を選択

4.UIApplicationMain関数の呼び出しでアプリケーションDelegateクラスを指定する

main.mファイルのUIApplicationMain関数呼び出し箇所で、アプリケーションDelegateクラス名称を指定します。

修正箇所
main.mの14行目付近
修正前
int retVal = UIApplicationMain( argc, argv, nil, nil );
修正後
int retVal = UIApplicationMain( argc, argv, nil, @"(プロジェクト名)AppDelegate" );

「(プロジェクト名)AppDelegate」はプロジェクト名称に合わせて適宜変更してください。

UIApplicationMain関数の第4引数がnilの場合、プロジェクトplistの「Main nib file base name」キーで定義したnibファイルが自動的に読み込まれ、nibファイル内で定義しているアプリケーションDelegateクラス呼び出されます。しかし、手順「3.」でnibファイルを利用しないように設定したため、アプリケーションDelegateクラスを明示的に指定します。

5.UIWindowとViewControllerの生成処理を追加

(プロジェクト名)AppDelegate.mファイルのdidFinishLaunchingWithOptions関数に、UIWindowとViewControllerの生成処理を追加します。

修正箇所
(プロジェクト名)AppDelegate.mの23行目付近
追加処理
 
window = [ [ UIWindow alloc ] initWithFrame:[ [ UIScreen mainScreen ] bounds ] ];
viewController = [ [ (プロジェクト名)ViewController alloc ] init ];
[ window addSubview:viewController.view ];

「(プロジェクト名)ViewController」はプロジェクト名称に合わせて適宜変更してください。

xibファイル/nibファイルを利用する場合は、nibファイル内でUIWindowやViewControllerの生成が自動的に行われます。しかし、xibファイル/nibファイルを利用しない場合は、UIWindowなどの生成を明示的に行います。

6.ViewControllerにViewの作成処理を追加する

(プロジェクト名)ViewController.mファイルにloadView関数を追加し、View作成処理を記述します。

・例:オレンジ色背景のViewを追加する

- ( void )loadView
{
    [ super loadView ];

    UIView * testView = [ [ [ UIView alloc ] initWithFrame:self.view.bounds ] autorelease ];
    testView.backgroundColor = [ UIColor orangeColor ];

    [ self.view addSubview:testView ];
}

なお、xib(nib)ファイルの有無とloadView/viewDidLoad関数が呼び出される関係は以下の通りです。

  • xibファイルを利用する場合:viewDidLoad関数のみが呼び出される
  • xibファイルを利用しない場合:loadView関数→viewDidLoad関数の順で呼び出される

7.動作確認する

プロジェクトをビルド&実行して、画面が表示されれば完了です。

図4:実行結果
図4:実行結果

関連する記事