理屈がわかったので、loadViewには退場してもらいますた。

$テン・シー・シー-1

 で、「iPhoneアプリ開発、その(159)」の第2案、Interface BuilderではUIView一枚貼っておいて、残りのビューをプログラム上で作成するというのは、この詳細ビューの提案項目をクリックした時に現れる「支持理由ページ」でやってみようかと。

$テン・シー・シー-3
↑こいつね

 名前は
CoDetailViewController

 としました。

 今回はXibファイル同時作成なので、ファイル>新規ファイル...メニューを選んでワントォスリフォーざ~んす。

$テン・シー・シー-2
With XIB for user interfaceをチェックだ!

 いつものようにClassフォルダ下に作成。

$テン・シー・シー-3

 XibファイルはResourceに入るかなっと思ったら、普通に.hや.mと同じ位置に作られました。
 ま、その方が素直ですな。

$テン・シー・シー-4

 もう、この時点でXibファイルはFile's OwnerはCoDetailViewControllerになってるし、UIViewは一枚が画面全体に貼られてるので、さわる必要ナッシング。

$テン・シー・シー-5

 CoDetailViewControllerの構成は、基本的にDetailViewControllerと同じなんで、そのまんまパクります。IBOutletはいらんのとsugestionTableViewってのをvoteTableViewに変えるくらい。変えなくてもいいけどね。

@interface CoDetailViewController 
: UIViewController<UITableViewDelegate, UITableViewDataSource> {
UIImageView* imageView;
UITextView* commentView;
UITableView* voteTableView;
UIImage* image;
}
@property (nonatomic, retain) UIImage* image;

@end

 テーブルのためのメソッド群
numberOfSectionsInTableView
tableView:numberOfRowsInSectiontableView:cellForRowAtIndexPath:

 もDetailViewControllerからコピペでOK。
 ただしtableView:numberOfRowsInSectiontableView:cellForRowAtIndexPath:ではdequeueReusableCellWithIdentifierするIDを@"CoDetailCell"に変えたりとかはしています。
 DetailViewControllerが持ってるUITableViewとは違うインスタンスなんで、そのままでも問題ないのかもしれないけど、一応。

 最後に注釈になってるviewDidLoadメソッドを復活させてself.view.boundsを元に各ビューを作成しaddSubViewしていく。詳しくはサンプルソースで。ま、位置設定は適当ですが...
 できたテーブルは見るためだけなんで

voteTableView.allowsSelection = NO;

 としてタップに反応しないようにしました。

 あとはDetailViewControllerでFirstViewControllerでやったようにtableView: didSelectRowAtIndexPath: newIndexPathでself.navigationControllerに作成したCoDetailViewControllerインスタンスをプッシュ。

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath
{
UITableViewCell* cell = [tableView cellForRowAtIndexPath:newIndexPath];
CoDetailViewController* ctl = [[CoDetailViewController alloc]
initWithNibName:@"CoDetailViewController" bundle:nil];
ctl.title = cell.textLabel.text;
ctl.image = image;
[self.navigationController pushViewController:ctl animated:YES];
[ctl release];
}

 うりゃっと実行。

$テン・シー・シー-6

 CoDetailViewControllerのtitleに選択された項目のタイトルを入れたので、ナビゲーションバーに表示されてますな。
 ただ~し、戻るボタンが「Back」になっちゃってます。

$テン・シー・シー-7

 こいつは、DetailViewController側のtitleが設定されてないためでした。
 ナビゲーションバーはプッシュされたビューに切り替える時に元のビューのタイトルを「Back」ボタンのタイトルに使うみたいっす。なのでtitle変数が未設定だと「Back」になるみたい。
 ちゅーことで、急遽FirstViewControllerのtableView:didSelectRowAtIndexPath:newIndexPathで

	UILabel* name = (UILabel*)[cell viewWithTag:tag_Name];
ctl.title = name.text;

 てして名前を設定してみました。

$テン・シー・シー-8
いい感じ

 これでナビゲーションの戻るボタンも「Back」から、戻るビューのタイトルに変化。

$テン・シー・シー-9

 オッケー、オッケー。
 って、ありゃりゃ、戻ると項目がハイライトされたままだわ。

$テン・シー・シー-10

 これは、FirstViewControllerがUITableViewControllerからの継承なのに対し、DetailViewControllerがUIViewControllerからの継承であることが理由みたい。

 自前でハイライト解除しないといかんわけね。

 FirstViewControllerの動き観察してると、ナビゲーションで戻った時にハイライトを解除してるみたいなんで、DetailViewControllerでもviewWillAppearメソッドを使う事にしました。
 こいつは、ビューが表示される時に呼び出されるメソッド。
 ここで選択されてるテーブル項目を解除する。

-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[sugestionTableView deselectRowAtIndexPath:
[sugestionTableView indexPathForSelectedRow] animated:YES];
}


 ばっちりですわ。
 次回、テーブルの項目デザインをもう少し細かく決定していく。

------------
サンプルプロジェクト:konohana_test8.zip