カスタム検索

2008年12月25日木曜日

iPhoneで動かすHelloWorld その2

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

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

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

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

HelloWorldAppDelegate.h
  1. #import <uikit uikit.h="">  
  2. @class MyViewController; // クラス宣言  
  3.   
  4. @interface HelloWorldAppDelegate : NSObject <uiapplicationdelegate> {  
  5.     UIWindow *window;  
  6.     MyViewController *myViewController; // 追加したビューをインスタンス変数として定義します  
  7. }  
  8.   
  9. @property (nonatomic, retain) IBOutlet UIWindow *window;  
  10. @property (nonatomic, retain) MyViewController *myViewController;  
  11.   
  12. @end  
  13. </uiapplicationdelegate></uikit>  


HelloWorldAppDelegate.m
  1. #import "HelloWorldAppDelegate.h"  
  2. #import "MyViewController.h" // インポート宣言  
  3.   
  4. @implementation HelloWorldAppDelegate  
  5.   
  6. @synthesize window;  
  7. // アクセサメソッドの合成?  
  8. @synthesize myViewController;  
  9.   
  10. - (void)applicationDidFinishLaunching:(UIApplication *)application {      
  11.  // ViewControllerの作成、ControllerView.nibをターゲットとします。bundleはresouceの位置的な情報?  
  12.  MyViewController *aViewController = [[MyViewController alloc]initWithNibName:@"ControllerView" bundle:[NSBundle mainBundle]];  
  13.  // デリゲータのmyViewControllerに上で作成したインスタンスを指定  
  14.  self.myViewController=aViewController;  
  15.  // 一時インスタンスの解放  
  16.  [aViewController release];  
  17.       
  18.  // myViewControllerからviewを取得  
  19.  UIView *controllersView=[myViewController view];  
  20.  // windowへControllerViewのviewを追加  
  21.  [window addSubview:controllersView];  
  22.    
  23.  [window makeKeyAndVisible];  
  24. }  
  25.   
  26. - (void)dealloc {  
  27.     [myViewController release]; // デリゲートが解放される時(アプリ終了時)にビューを一緒に解放します  
  28.     [window release];  
  29.     [super dealloc];  
  30. }  
  31.   
  32. @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