最近iPhoneアプリを作りながら、iOS関連の知識を広げることが
できていなかったのですが、多少やる時間と機会が増えてきたので、
ブログにメモる習慣を再開します。

今回はXIBでレイアウトしたviewを独自クラスとして使用する方法です。
初歩の初歩という気がしないでもないですが、意外と素直にいかないというかなんというか、なので書いておきます。

UIViewControllerを作る時はデフォルトで生成されるので問題ないと思います。
UIViewControllerは継承したくなくて、ただのviewとして作りたい場合です。

ちゃんとMVCで設計するとこんな感じ。
・xxxController.h
・xxxController.m
・xxxView.xib

「xxxView.xib」のFile's Ownerに「xxxController」クラスを設定して
「xxxController.m」のinitとかのどっかで読み込むだけ。

UINib *nib = [UINib nibWithNibName:@"xxxView" bundle:nil];
NSArray *array = [nib instantiateWithOwner:self options:nil];
self.view = [array objectAtIndex:0];


これとは別にクラス=viewみたいな形にしたい時が個人的には
結構あります。(MVCじゃないとか言われそうだけど…)

まあ、いくつかのviewを一つのControllerで制御する時は
こうなると思う。たぶんきっと。

・xxxView.h
・xxxView.m
・xxxView.xib

この場合はFile's Ownerではなくviewのクラスを「xxxView」
にしましょう。

この時に普通に感覚的にやるとinitとかの中で上記のコードを
書きたくなるのですが、xibから読み込んだviewはallocもinitも
完了しているわけです。(autorelease)

ということでクラスメソッドで生成するという所に落ち着きました。
alloc initでは生成できないので、オブジェクト保持したい場合は
生成元でretainを。


+(id)createFromNib
{
UINib *nib = [UINib nibWithNibName:@"xxxView" bundle:nil];
NSArray *array = [nib instantiateWithOwner:nil options:nil];
UIView *view = [array objectAtIndex:0];

if (view) {
// Initialization code
[view initializeNibObject];//何か初期化したい場合
}
return view;
}