2012/01/19更新

[XCODE] Nibファイルを複数使って一つの画面を作成する

このエントリーをはてなブックマークに追加      

iPhoneアプリを作成していて、一つのViewでも複数のNib(またはXib)ファイルを使って、 画面を作成したいと思って調べました。 今日はその方法を記載したいと思います。

XCODEでViewを作成すると基本的には、ViewひとつにつきひとつのNibファイルが出来ます。 そんな中、他の画面とか他のiPhoneアプリとかで同じように使いたい画面の要素がある場合に、 Viewのある部分(作り込んだ部分)を共通化したい。
そんなときにNibファイルを用いるとそれが実現出来ます。
以下に手順を示します。




まずは追加で使いたいNibファイルを用意する

XCODEの新規ファイル追加を用いて、Nibファイルを追加します。 今回の場合には、「View1.xib」「View2.xib」を追加しました。
画像

あっあと、今回利用するViewControllerは上図のMultiNibViewControllerです。




続いてMultiNibViewControllerに追加したNibファイルを読み込む設定を行う

設定を行う為には、読み込んだViewを保持する変数の定義と、実際に読み込む処理が必要です。
読み込んだViewを保持する変数は以下のように定義します。

@interface MultiNibViewController : UIViewController {
    
    UIView *view1;
    UIView *view2;
}

@property(nonatomic, retain) IBOutletUIView *view1;
@property(nonatomic, retain) IBOutletUIView *view2;
@end

これは基本的なことなので、簡単ですね(*´∇`*)
次に、Nibファイルを読み込む処理を記述します。こんな感じです。

NSBundle *bundle = [NSBundlemainBundle];

// View1.xibを読み込んで、表示する
[bundle loadNibNamed:@"View1" owner:self options:nil];
view1.center = CGPointMake(160, 115);
[self.view addSubview:view1];

// View2.xibを読み込む
[bundle loadNibNamed:@"View2" owner:self options:nil];
view2.center = CGPointMake(160, 257);
[self.view addSubview:view2];

ここでのポイントは、NSBundleのインスタンスが持つ「loadNibNamed:owner:options:」というメソッドです。 このメソッドで対象のNibファイルとその保持するクラス(ここではself)を指定することで、 self.view1やself.view2にインスタンスが代入されます。
なおここでは読み込んだViewに対して、位置を修正して、Viewに表示しています。




追加したNibファイルへの設定

「loadNibNamed:owner:options:」で、指定されているownerや、 Nibファイルで読み込んだViewのインスタンス代入先を指定するする必要があります。
Nibファイルを開いて、FileOwnerに上記のViewControllerクラスを指定します。
画像

また、NibファイルのViewとMultiNibViewControllerのview1との関連付けを行います。 以下例では「View1.xib」での設定例です。
画像

以上で、追加したNibファイルを読み込むことが出来るようになります。




最後に

Viewの作成をNibファイルではなくてプログラムでやろうとすると、位置指定とか煩雑な処理が増えて大変。
画面のパーツをNibファイルで作れると楽で良いですよね(・∀・)






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。