iOS SDKメモ Interface Builderを使わないでUIViewを表示させてみる

iPad,Mac,プログラミング

C#の記事のようにObjective-Cを使ったiPadのプログラミングについて自分用にメモっとくことに…。
最初はタイトルどおりInterface Builderを使わないでUIViewを表示させてみる。

今回の手順をざっくり書くとこんな感じ。

  1. Windows Based Applicationプロジェクトを作成
  2. 自動で作成された表示にまつわるファイルを削除&設定ファイルを修正
  3. plistファイル(今回の例ではUntitled-Info.plistって名前のファイル)の設定を変更
  4. UIViewを継承したクラスをプロジェクトに追加
  5. main.cのmain関数を編集してデリゲートを指定
  6. UntitledAppDelegate.mを編集してUIWindow,UIViewController,UIViewを生成&設定
  7. UntitledAppDelegate.mの余分な関数を削除
  8. UntitledView.mのinitWithFrame:frame関数を編集

さっくりの順番どおりにすると…Windows Based Applicationプロジェクトを作成する。

  1. Xcodeを起動して"新規Xcodeプロジェクトを作成"を選択する。
  2. プロジェクトのテンプレートをこんな感じで選択して画面右下にある"選択…"ボタンをクリックする。
    (1) 画面の左側にある"iPhone OSのApplication"を選択
    (2) 並んでいるアイコンから"View-based Application"を選択
    (3) 画面の真ん中あたりにあるProductで"iPad"を選択
  3. プロジェクト名とプロジェクトのファイルたちを作る場所を聞いてくるので、好きな名前と場所を設定して"保存"ボタンをクリックする。
    今回は名前をデフォルトの"Untitled"、場所も書類(Documentフォルダね)にした。
  4. 最低限アプリが動作するのに必要なファイルが自動で作成される。

自動で作成された表示にまつわるファイルを削除&設定ファイルを修正する。
これをしないと、いくらGUIとか表示まわりを作っても表示してくれない。
まずは、MainWindow.xibファイルを削除する。

  1. Xcodeの画面左側にあるツリーでResourcesフォルダにあるMainWindow.xibをクリック。
  2. Xcodeのメニューから編集/削除を選択する。
  3. こんな警告ダイアログでファイルを削除していいか聞いてくるので、"一緒にゴミ箱に入れる"ボタンをクリックする。
    ※"参照を削除"ボタンをクリックしてもいいけど、ファイルが残っちゃうので、いっその事削除した方がいいかも。

次にplistファイル(今回の例ではUntitled-Info.plistって名前のファイル)の設定を変更する。
ちなみに、基本的にアプリはこのファイルの内容を読み取って動いている。

  1. Xcodeの画面左側にあるツリーでResourcesフォルダにあるplistファイルをクリックする。
  2. 画面右側に表示されたリストのうち、"Main nib file base name"の項目に書いてある"MainWindow"という文字列を削除して空欄するか、列ごと削除する。

UIViewを継承したクラスをプロジェクトに追加する。

  1. Xcodeの画面左側にあるツリー上で、Classフォルダを選択する。
  2. Xcodeのメニューバーで、ファイル/新規ファイル…を選択する。
  3. 作成するファイルのタイプを選択して画面右下の"次へ"ボタンをクリックする。
    GUIを作成するにはUIViewを継承する必要があることに注意する。
    (1) 画面の左側にある"Cocoa Touch Class"を選択
    (2) 画面のアイコンが並んでいる中で"Objective-C class"を選択
    (3) 画面の真ん中あたりにあるSubclass ofで"UIView"を選択
  4. ファイル名を入力してくれと言ってくるので、ファイル名を入力して"完了"ボタンをクリックする
    ここで、ファイル名はプロジェクト名+Viewにした。
  5. そすっと、Classフォルダの下にさっきのファイルが作成される。

main.cのmain関数を編集してデリゲートを指定する。

  1. Xcodeの画面左側にあるツリーでOther Sourcesフォルダにあるmain.cをクリックする。
  2. main関数のApplication 関数の第4引数にデリゲートクラスのクラス名を指定する。

    今回の例だとデリゲートクラスのクラス名はUntitledAppDelegateなので、こんな感じでクラス名を指定する。

    int retVal = UIApplicationMain(argc, argv, nil, @"UntitledAppDelegate");

UntitledAppDelegate.mを編集してUIWindow,UIViewController,UIViewを生成&設定する。
まずは、さっき追加したUntitledView.hをUntitledAppDelegate.mにインポートする。

#import "UntitledView.h"

で、applicationDidFinishLaunching:application関数を追加&編集する。

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
	CGRect frame = [[UIScreen mainScreen] bounds];
	window = [[UIWindow alloc] initWithFrame:frame];
	viewController = [[UntitledViewController alloc] init];

	UntitledView* view = [[UntitledView alloc] initWithFrame:frame];
	viewController.view = view;

	[window addSubview:viewController.view];
	[window makeKeyAndVisible];
}

UntitledAppDelegate.mの余分な関数を削除する。
ここでは自動で作成されたapplication:application:launchOptions関数を削除する。

/*
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after app launch.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    return YES;
}
*/

UntitledView.mのinitWithFrame:frame関数を編集する。
動作確認のために背景をオレンジで表示するようにしようと思うので、こんな感じでinitWithFrame関数を編集する。

- (id)initWithFrame:(CGRect)frame
{
	if ((self = [super initWithFrame:frame]))
	{
		// Initialization code
		self.backgroundColor = [UIColor orangeColor];
	}
	return self;
}

ここまでで、ひととおり完成。
アプリをビルド&実行してみる。

 

できたっぽい。
とまあ、タイトルどおりInterface Builderを使わないでUIViewを表示させるメモってことで。