カスタム検索

2008年12月25日木曜日

iPhoneで動かすHelloWorld その2

Viewを追加するにはViewControllerとnibファイルを使用します。

まずはViewControllerの作成です。
Xcodeから新規ファイルで CocoaTouchClasses の UIViewControler subclass を選択します。
テンプレートを元にざっくりとファイルが生成されます。

作成したクラスをアプリケーションデリゲートのインスタンス変数に追加します。

作成したクラスをMyViewControllerとし、HelloWorldAppDelegateへ以下のように定義します。

HelloWorldAppDelegate.h

#import
@class MyViewController; // クラス宣言

@interface HelloWorldAppDelegate : NSObject {
UIWindow *window;
MyViewController *myViewController; // 追加したビューをインスタンス変数として定義します
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) MyViewController *myViewController;

@end


HelloWorldAppDelegate.m

#import "HelloWorldAppDelegate.h"
#import "MyViewController.h" // インポート宣言

@implementation HelloWorldAppDelegate

@synthesize window;
// アクセサメソッドの合成?
@synthesize myViewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
// ViewControllerの作成、ControllerView.nibをターゲットとします。bundleはresouceの位置的な情報?
MyViewController *aViewController = [[MyViewController alloc]initWithNibName:@"ControllerView" bundle:[NSBundle mainBundle]];
// デリゲータのmyViewControllerに上で作成したインスタンスを指定
self.myViewController=aViewController;
// 一時インスタンスの解放
[aViewController release];

// myViewControllerからviewを取得
UIView *controllersView=[myViewController view];
// windowへControllerViewのviewを追加
[window addSubview:controllersView];

[window makeKeyAndVisible];
}

- (void)dealloc {
[myViewController release]; // デリゲートが解放される時(アプリ終了時)にビューを一緒に解放します
[window release];
[super dealloc];
}

@end


ビューを作成します。
InterfaceBuilderを起動して新規作成>CocoaTouch>Viewでビューが作成できます。
ControllerView.nib としてHelloWorld プロジェクトに保存します。
Xcodeが立ち上がっていれば、自動的にリソースとして取り込むか選択が出ます。
リソースとして登録されたらResourcesフォルダに移動します。

このViewがどのコントローラークラスに所属するかを指定します。
Tools > Identity Inspector を起動して、File's Ownerを選択>ClassにMyViewControllerを指定します。
File's Ownerにアウトレット(nibファイル内の項目に接続しているインスタンス変数)を設定します。
File's OwnerをCtrlクリックしながらViewまでドラッグすればOKです。

Tool > Attribute Inspector から BackgroundColorを変更してシミュレーターで動かすと、このViewが正しく読み込まれているのがわかります。

次はビューにオブジェクトを追加します。

1 件のコメント:

CLONE5 さんのコメント...

始めまして、たこと申します。
当サイトでViewControllerを使って画面表示をさせる方法を読ませていただいて、実際にアプリ開発に着手しはじめたところなのですが。

いまいち、理解できていないようです。
もしよろしければ、少し御助言していただけないでしょうか?

[質問1]
ここに書いてあるよう、プロジェクトテンプレートをWindow-Basedにしました。
そして、別にNIB(XIB)をつくって、デリゲートの最初で読み込ませ、ViewをWindowにaddすることは確認できました。

しかし、addするViewの上部にNavigation Barを配置しているのですが、NavigationBarの上部半分がステータスバーの中に隠れてしまいます。
Interface Builderでデザインしていたときは、きっちりとステータスバーの真下に配置していたのですが。。。

[質問2]
私が作成しようとしているアプリは、複数の画面(cocoa的にはViewですが)があるのですが、ここのサンプルを読ませていただいた感じでは、画面数分ViewコントローラとXIBファイルを作成する。

んで、画面の切り替えは windowにaddやremove、命令はわすれましたがViewの位置の入れ替えを行ってやろうとおもっています。
それに関しては認識はあっていますでしょうか?

長々と乱文で申し訳ありませんが、
是非よろしくお願いいたします m(_ _)m