[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

[iOS開発本] ARC や Storyboardなどを説明した本

ARC や Storyboard を紹介した良い本を教えてほしい、と会社のマニアな人に質問されたので

記事を読む

[iOS SDK] No identities are available for signing 問題にはまる

久しぶりに Provisioning Profileではまった。 この問題にはまると、解決までにか

記事を読む

no image

最近読んだ本: これでiPhoneアプリが1000万本売れた 南雲 玲生著

周りでおもしろいと言っている人がいたので買ってみた。2011/05/21発売。 株式会社ユードーの南

記事を読む

no image

iPhone から au 公式スパムメールを止める

hotinfo@himail.ezweb.ne.jp からau公式スパムが何度も届くので、重い腰を上

記事を読む

[iOS本] Objective-CによるAutoLayout 解説本 (iOS7/iOS8)

UIKit徹底解説 iOSユーザーインターフェイスの開発 posted with カエ

記事を読む

no image

Photoshop デザインラボ

Photoshop持っていないが、Amazon で評判が良かったので購入。 感想は後ほど。

記事を読む

no image

[iOS] iOSでToast

iOSでAndroidのToast的な、数秒間メッセージを表示して自動的に消える部品を探していたのだ

記事を読む

Pastebot が OSX 用になっていた

昔使っていたがいつの間にか使わなくなっていた Pastebot が、いつの頃からかiOS版がなくなり

記事を読む

no image

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

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

記事を読む

no image

これは便利 iPhoneプログラミングUIKit詳解リファレンス

Amazonでの評判も良いし、書店で立ち読みしていくつか有用な情報を見つけたので、iPhoneプログ

記事を読む

Message

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

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

→もっと見る

PAGE TOP ↑