理屈がわかったので、loadViewには退場してもらいますた。
![$テン・シー・シー-1](https://stat.ameba.jp/user_images/20091210/00/xcc/4a/09/j/o0145026810335686458.jpg?caw=800)
で、「iPhoneアプリ開発、その(159)」の第2案、Interface BuilderではUIView一枚貼っておいて、残りのビューをプログラム上で作成するというのは、この詳細ビューの提案項目をクリックした時に現れる「支持理由ページ」でやってみようかと。
![$テン・シー・シー-3](https://stat.ameba.jp/user_images/20091101/23/xcc/63/06/j/o0393025210293749679.jpg?caw=800)
↑こいつね
名前は
としました。
今回はXibファイル同時作成なので、ファイル>新規ファイル...メニューを選んでワントォスリフォーざ~んす。
![$テン・シー・シー-2](https://stat.ameba.jp/user_images/20091210/00/xcc/81/a7/j/o0500037310335695067.jpg?caw=800)
With XIB for user interfaceをチェックだ!
いつものようにClassフォルダ下に作成。
![$テン・シー・シー-3](https://stat.ameba.jp/user_images/20091210/00/xcc/cf/9b/j/o0500038210335697803.jpg?caw=800)
XibファイルはResourceに入るかなっと思ったら、普通に.hや.mと同じ位置に作られました。
ま、その方が素直ですな。
![$テン・シー・シー-4](https://stat.ameba.jp/user_images/20091210/00/xcc/79/91/j/o0500026210335699074.jpg?caw=800)
もう、この時点でXibファイルはFile's OwnerはCoDetailViewControllerになってるし、UIViewは一枚が画面全体に貼られてるので、さわる必要ナッシング。
![$テン・シー・シー-5](https://stat.ameba.jp/user_images/20091210/00/xcc/8a/c1/j/o0488054910335701114.jpg?caw=800)
CoDetailViewControllerの構成は、基本的にDetailViewControllerと同じなんで、そのまんまパクります。IBOutletはいらんのとsugestionTableViewってのをvoteTableViewに変えるくらい。変えなくてもいいけどね。
テーブルのためのメソッド群
もDetailViewControllerからコピペでOK。
ただしtableView:numberOfRowsInSectiontableView:cellForRowAtIndexPath:ではdequeueReusableCellWithIdentifierするIDを@"CoDetailCell"に変えたりとかはしています。
DetailViewControllerが持ってるUITableViewとは違うインスタンスなんで、そのままでも問題ないのかもしれないけど、一応。
最後に注釈になってるviewDidLoadメソッドを復活させてself.view.boundsを元に各ビューを作成しaddSubViewしていく。詳しくはサンプルソースで。ま、位置設定は適当ですが...
できたテーブルは見るためだけなんで
としてタップに反応しないようにしました。
あとはDetailViewControllerでFirstViewControllerでやったようにtableView: didSelectRowAtIndexPath: newIndexPathでself.navigationControllerに作成したCoDetailViewControllerインスタンスをプッシュ。
うりゃっと実行。
![$テン・シー・シー-6](https://stat.ameba.jp/user_images/20091210/01/xcc/ac/7d/j/o0207037610335718629.jpg?caw=800)
CoDetailViewControllerのtitleに選択された項目のタイトルを入れたので、ナビゲーションバーに表示されてますな。
ただ~し、戻るボタンが「Back」になっちゃってます。
![$テン・シー・シー-7](https://stat.ameba.jp/user_images/20091210/01/xcc/49/eb/j/o0322006510335720665.jpg?caw=800)
こいつは、DetailViewController側のtitleが設定されてないためでした。
ナビゲーションバーはプッシュされたビューに切り替える時に元のビューのタイトルを「Back」ボタンのタイトルに使うみたいっす。なのでtitle変数が未設定だと「Back」になるみたい。
ちゅーことで、急遽FirstViewControllerのtableView:didSelectRowAtIndexPath:newIndexPathで
てして名前を設定してみました。
![$テン・シー・シー-8](https://stat.ameba.jp/user_images/20091210/01/xcc/99/92/j/o0500025810335726062.jpg?caw=800)
いい感じ
これでナビゲーションの戻るボタンも「Back」から、戻るビューのタイトルに変化。
![$テン・シー・シー-9](https://stat.ameba.jp/user_images/20091210/01/xcc/a7/79/j/o0322004510335727711.jpg?caw=800)
オッケー、オッケー。
って、ありゃりゃ、戻ると項目がハイライトされたままだわ。
![$テン・シー・シー-10](https://stat.ameba.jp/user_images/20091210/01/xcc/1b/83/j/o0215037810335728780.jpg?caw=800)
これは、FirstViewControllerがUITableViewControllerからの継承なのに対し、DetailViewControllerがUIViewControllerからの継承であることが理由みたい。
自前でハイライト解除しないといかんわけね。
FirstViewControllerの動き観察してると、ナビゲーションで戻った時にハイライトを解除してるみたいなんで、DetailViewControllerでもviewWillAppearメソッドを使う事にしました。
こいつは、ビューが表示される時に呼び出されるメソッド。
ここで選択されてるテーブル項目を解除する。
ばっちりですわ。
次回、テーブルの項目デザインをもう少し細かく決定していく。
------------
サンプルプロジェクト:konohana_test8.zip
![$テン・シー・シー-1](https://stat.ameba.jp/user_images/20091210/00/xcc/4a/09/j/o0145026810335686458.jpg?caw=800)
で、「iPhoneアプリ開発、その(159)」の第2案、Interface BuilderではUIView一枚貼っておいて、残りのビューをプログラム上で作成するというのは、この詳細ビューの提案項目をクリックした時に現れる「支持理由ページ」でやってみようかと。
![$テン・シー・シー-3](https://stat.ameba.jp/user_images/20091101/23/xcc/63/06/j/o0393025210293749679.jpg?caw=800)
↑こいつね
名前は
CoDetailViewController |
としました。
今回はXibファイル同時作成なので、ファイル>新規ファイル...メニューを選んでワントォスリフォーざ~んす。
![$テン・シー・シー-2](https://stat.ameba.jp/user_images/20091210/00/xcc/81/a7/j/o0500037310335695067.jpg?caw=800)
With XIB for user interfaceをチェックだ!
いつものようにClassフォルダ下に作成。
![$テン・シー・シー-3](https://stat.ameba.jp/user_images/20091210/00/xcc/cf/9b/j/o0500038210335697803.jpg?caw=800)
XibファイルはResourceに入るかなっと思ったら、普通に.hや.mと同じ位置に作られました。
ま、その方が素直ですな。
![$テン・シー・シー-4](https://stat.ameba.jp/user_images/20091210/00/xcc/79/91/j/o0500026210335699074.jpg?caw=800)
もう、この時点でXibファイルはFile's OwnerはCoDetailViewControllerになってるし、UIViewは一枚が画面全体に貼られてるので、さわる必要ナッシング。
![$テン・シー・シー-5](https://stat.ameba.jp/user_images/20091210/00/xcc/8a/c1/j/o0488054910335701114.jpg?caw=800)
CoDetailViewControllerの構成は、基本的にDetailViewControllerと同じなんで、そのまんまパクります。IBOutletはいらんのとsugestionTableViewってのをvoteTableViewに変えるくらい。変えなくてもいいけどね。
@interface CoDetailViewController |
テーブルのためのメソッド群
numberOfSectionsInTableView |
も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 |
うりゃっと実行。
![$テン・シー・シー-6](https://stat.ameba.jp/user_images/20091210/01/xcc/ac/7d/j/o0207037610335718629.jpg?caw=800)
CoDetailViewControllerのtitleに選択された項目のタイトルを入れたので、ナビゲーションバーに表示されてますな。
ただ~し、戻るボタンが「Back」になっちゃってます。
![$テン・シー・シー-7](https://stat.ameba.jp/user_images/20091210/01/xcc/49/eb/j/o0322006510335720665.jpg?caw=800)
こいつは、DetailViewController側のtitleが設定されてないためでした。
ナビゲーションバーはプッシュされたビューに切り替える時に元のビューのタイトルを「Back」ボタンのタイトルに使うみたいっす。なのでtitle変数が未設定だと「Back」になるみたい。
ちゅーことで、急遽FirstViewControllerのtableView:didSelectRowAtIndexPath:newIndexPathで
UILabel* name = (UILabel*)[cell viewWithTag:tag_Name]; |
てして名前を設定してみました。
![$テン・シー・シー-8](https://stat.ameba.jp/user_images/20091210/01/xcc/99/92/j/o0500025810335726062.jpg?caw=800)
いい感じ
これでナビゲーションの戻るボタンも「Back」から、戻るビューのタイトルに変化。
![$テン・シー・シー-9](https://stat.ameba.jp/user_images/20091210/01/xcc/a7/79/j/o0322004510335727711.jpg?caw=800)
オッケー、オッケー。
って、ありゃりゃ、戻ると項目がハイライトされたままだわ。
![$テン・シー・シー-10](https://stat.ameba.jp/user_images/20091210/01/xcc/1b/83/j/o0215037810335728780.jpg?caw=800)
これは、FirstViewControllerがUITableViewControllerからの継承なのに対し、DetailViewControllerがUIViewControllerからの継承であることが理由みたい。
自前でハイライト解除しないといかんわけね。
FirstViewControllerの動き観察してると、ナビゲーションで戻った時にハイライトを解除してるみたいなんで、DetailViewControllerでもviewWillAppearメソッドを使う事にしました。
こいつは、ビューが表示される時に呼び出されるメソッド。
ここで選択されてるテーブル項目を解除する。
-(void)viewWillAppear:(BOOL)animated { |
ばっちりですわ。
次回、テーブルの項目デザインをもう少し細かく決定していく。
------------
サンプルプロジェクト:konohana_test8.zip