[iPhone SDK] View Based Application で NIB(XIB)ファイルを削除してみる

公開日: : iPhone, ,

iPhoneアプリ開発に慣れてくると、段々Interface Builderを使わなくなってくる。
Interface Builder との連携を完全に切ろうと思い、今回初めてView Based で作成したプロジェクトで NIB(XIB)ファイルを削除してみたらはまったのでメモしておく。

Stack Overflowでも、同じようにはまっている人がいた。(what is the difference between loadView and viewDidLoad?)

NIBファイルを削除すると、NIBファイルが生成してくれていた、UIWindowやUIViewControllerを自力で作らなければならなくなり、UIApplicationMain の変更も必要になる。
さらに、UIViewController はデフォルトではNIBファイルを読みにいってしまう(実際には、self.view に値がないとNIBファイルを探しに行くようだ) ので、それを避けるためにloadView でUIView を作成する必要がある。

参考にしたのは UIKit詳解リファレンスのP.21-P.27あたり。

UIKit詳解リファレンスは Window Based なプログラムを改造しているが、自分は View Based で作ったものを改造したので、loadViewのところではまってしまった。

具体的には、下記のステップの4,5が異なる。

  1. 「グループとファイル」から、.xib ファイルを全てDeleteキーで削除する
  2. info.plist から Main nib file base name を項目自体Deleteキーで削除する
  3. main.m のUIApplicationMain の第4引数の nil を アプリケーションデリゲートクラス名に変更する。
  4. アプリケーションデリゲートクラスの applicationDidFinishLaunchingXXX で、UIWindow と UIViewController を自力で作成する
  5. UIViewController クラスのloadViewで、self.view に UIView を自力で作成して入れる

手順をもう少し詳しく書いてみる。

View Based Application のテンプレートを使い、 NoXibTest という名前のプロジェクトを作成

「グループとファイル」から、MainWindow.xibとNoXibTest2ViewController.xibを削除

main.m の UIApplicationMain を下記のように変更

int main(int argc, char *argv[]) {
    
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"NoXibTestAppDelegate");
    [pool release];
    return retVal;
}

アプリケーションデリゲートクラスの applicationDidFinishLaunchingXXX で、UIWindow と UIViewController を自力で作成する

	
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
    // Override point for customization after application launch.
	CGRect rect = [[UIScreen mainScreen]bounds];
	window = [[UIWindow alloc]initWithFrame:rect];
	viewController = [[[NoXibTestViewController alloc]init]autorelease];

    // Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    return YES;
}

UIViewController クラスのloadViewで、self.view に UIView を自力で作成して入れる

- (void)loadView {
	CGRect screenBounds = [[UIScreen mainScreen]bounds];		
	UIView *view = [[[UIView alloc]initWithFrame:screenBounds]autorelease];
	view.backgroundColor = [UIColor redColor]; // わかりやすいように赤背景にする
	self.view = view;	
}

うまくいかなかったらお知らせください。

関連記事

no image

ツイッター 140文字が世界を変える コグレマサト+いしたにまさき

一度途中まで書いたのが手違いで消してしまった...のでもう一度。 一応Reviewplusさんからの

記事を読む

[洋書] The old man and the sea

The Old Man and the SeaErnest Hemingway Numitor Co

記事を読む

iPhoneとBluetooth連携できる体重計 タニタ RD-900

iPhone と連携できる体重計には以前から興味があって、Withings の WS-30 を狙って

記事を読む

no image

iPhone/Androidアプリで週末起業(山崎潤一郎著) を読んでみた。

前著を読んで、ちょっと楽観的に書きすぎていると思ったけれどもとりあえず最新版が出たので読んでみた。

記事を読む

no image

電子書籍を出してみたよ! を買ってみた。

面白そうだったので買ってみた。電子出版に興味のある出版関係者で集まってKindle Storeで日本

記事を読む

no image

インド式計算マスター

最近朝起きたらやっているアプリ。 これはいい。今まで全く知らなかったインド式計算がいつの日かマスター

記事を読む

no image

[iPhone開発本] 基礎から学ぶ iPhoneアプリ開発 林 晃著

基礎から学ぶ iPhoneアプリ開発 という本が2010年7月24日に発売になるらしい。 題名にはま

記事を読む

no image

WWDC にひとりで参加する人向け情報

WWDC 2011 に行ってきたの続編。 自費で1人で参加したのだけれども、当時あまりそういう人向

記事を読む

no image

MacPeople 2010.02

定期購読している MacPeople 2010年2月号が今日届いた。 今回はメールアプリとUbunt

記事を読む

ParentalGate修正

いくつか数年前に作ってアップデートしていなかったアプリたちに関して、更新しないとApp Storeか

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

Vision Proアプリ開発本 8/24、8/26に発売

Vision Proアプリ開発入門 P400が 8/24 に発売、V

Developer Strap が日本でも購入可能に

USアカウントでしか購入できなかった Vision Pro 用 De

Vision Pro カバーケースを買ってみた

[itemlink post_id="11629"]

→もっと見る

PAGE TOP ↑