Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2009-07-22

[iPhone][Develop] UITableViewDelegateのメソッドを自分なりにまとめてみた 22:55  [iPhone][Develop] UITableViewDelegateのメソッドを自分なりにまとめてみた - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [iPhone][Develop] UITableViewDelegateのメソッドを自分なりにまとめてみた - Ni chicha, ni limona - 平均から抜けられない僕  [iPhone][Develop] UITableViewDelegateのメソッドを自分なりにまとめてみた - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

UITableViewのデリゲートメソッドについて、自分なりにまとめてみました。

  • 各メソッドがサポートするバージョン
  • 各メソッドがいつ呼ばれるか

をポイントにしています。ご参考になれば幸いです。


役割

テーブルビューを表示する時の、テーブルビュー構築に必要なプロパティを伝えてあげること。

※データソースは、テーブルビュー内で表示する情報を渡したり、テーブルビュー上の情報の変化をデータに反映させるためのもの。


必須メソッド

UITableView.h上で「@required」と表記されているもの。このメソッドがデリゲートを担当するクラスで定義されていないとビルドが通らない。


・・・はありませんでした。デリゲート無しでも動きはするよ、ということです。


オプションメソッド

UITableView.h上で「@optional」と表記されているもの。このメソッドが無くても、動く。でも細かい制御をしたい場合には必要。

こちらは用途に応じたメソッドがいっぱいありました。


■表示を変更したいとき
メソッド名2.2.13.0内容いつ呼ばれるか
- (void)tableView:(UITableView *) willDisplayCell:(UITableViewCell *) forRowAtIndexPath:(NSIndexPath *)セルが表示される直前に呼ばれるメソッド各セルが表示されるたび、何度も

■セル等の高さを決定
メソッド名2.2.13.0内容いつ呼ばれるか
- (CGFloat)tableView:(UITableView *) heightForRowAtIndexPath:(NSIndexPath *)各セルの高さを決めるテーブル表示時に各セルで1回だけ
- (CGFloat)tableView:(UITableView *) heightForHeaderInSection:(NSInteger)当該セクションのヘッダの高さを決めるテーブル表示時に各セクションで1回だけ
- (CGFloat)tableView:(UITableView *) heightForFooterInSection:(NSInteger)当該セクションのフッタの高さを決めるテーブル表示時に各セクションで1回だけ

■セクションのヘッダやフッタの情報決定

ここで決められた情報はtitleプロパティよりも優先されます。

メソッド名2.2.13.0内容いつ呼ばれるか
- (UIView *)tableView:(UITableView *) viewForHeaderInSection:(NSInteger)当該セクションのヘッダに表示するビューを決定テーブル表示時に各セクションで1回だけ
- (UIView *)tableView:(UITableView *) viewForFooterInSection:(NSInteger)当該セクションのフッタに表示するビューを決定テーブル表示時に各セクションで1回だけ

■アクセサリ領域(セルの右側)の構成決定
メソッド名2.2.13.0内容いつ呼ばれるか
- (UITableViewCellAccessoryType)tableView:(UITableView *) accessoryTypeForRowWithIndexPath:(NSIndexPath *)アクセサリ領域に何を表示するか各セルが表示されるたび、何度も
- (void)tableView:(UITableView *) accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)アクセサリ領域のボタンがタップされたときのイベントハンドラアクセサリ領域のボタンがタップされたとき

■選択

選択系はwill→didの順で呼ばれます。

メソッド名2.2.13.0内容いつ呼ばれるか
- (NSIndexPath *)tableView:(UITableView *) willSelectRowAtIndexPath:(NSIndexPath *)当該セルが選択された直後(didSelectRowAtIndexPathの直前)のイベントハンドラセルが選択されたとき
- (NSIndexPath *)tableView:(UITableView *) willDeselectRowAtIndexPath:(NSIndexPath *)×当該セルが選択解除された直後(didDeselectRowAtIndexPathの直前)のイベントハンドラセルが選択解除されたとき
- (void)tableView:(UITableView *) didSelectRowAtIndexPath:(NSIndexPath *)当該セルが選択解除された直後のイベントハンドラセルが選択されたとき
- (void)tableView:(UITableView *) didDeselectRowAtIndexPath:(NSIndexPath *)×当該セルが選択解除された直後のイベントハンドラセルが選択解除されたとき

■編集
メソッド名2.2.13.0内容いつ呼ばれるか
- (UITableViewCellEditingStyle)tableView:(UITableView *) editingStyleForRowAtIndexPath:(NSIndexPath *)当該セルが編集状態になったときに左側に表示するアイコン(挿入/削除/なし)editingプロパティをYESにしたときに、各セルで
- (NSString *)tableView:(UITableView *) titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)×当該セルを削除するときの、「Delete」の代わりに表示する文字列editingプロパティをYESにしたときに、各セルで(削除の場合)
- (BOOL)tableView:(UITableView *) shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)当該セルが編集状態になったときにセルをインデントするかどうかeditingプロパティをYESにしたときに、各セルで
- (void)tableView:(UITableView*) willBeginEditingRowAtIndexPath:(NSIndexPath *)当該セルをスワイプして編集状態にした直後(Deleteボタンが表示される前)のイベントハンドラセルをスワイプしてeditingプロパティをYESにしたとき
- (void)tableView:(UITableView*) didEndEditingRowAtIndexPath:(NSIndexPath *)当該セルのスワイプによる編集状態を解除した直後のイベントハンドラセルをスワイプして編集した後

■移動/ソートの振る舞い
メソッド名2.2.13.0内容いつ呼ばれるか
- (NSIndexPath *)tableView:(UITableView *) targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *) toProposedIndexPath:(NSIndexPath *)当該セルをドラッグした後の、妥当なインデックスを決定セルをドラッグして移動した後

■インデント量
メソッド名2.2.13.0内容いつ呼ばれるか
- (NSInteger)tableView:(UITableView *) indentationLevelForRowAtIndexPath:(NSIndexPath *)当該セルをインデントするときの深さeditingプロパティをYESにしたときに、各セルで

まとめ

デリゲートだけで結構色々あるので、データソースの方は挫折してしまいました。ごめんなさい。また気が向いたらやります。


この表を作る時に参考にした書籍

ちなみにですが、このテーブルを作る際は書籍「iPhoneアプリケーションプログラミング*1」を参考にしました。


  「iPhoneアプリケーションプログラミング

   ※Amazonインスタントストアへのリンクです


この本は日本語がおかしい部分があるものの、リファレンスとして活用できるようになったときに一番役に立つ本です。各クラスの主要なメソッドが一覧として書かれているので、最近何かをしたいときにとりあえず手元に置くようになっています。

はじめてのiPhoneプログラミング*2」がチュートリアルだとすれば、こちらはリファレンスですね。


特筆すべきは、はじめての〜よりこちらの方が、UITableViewCellを使う時に行儀の良くてスピードの出る書き方をしていることです。はじめての〜だけを読んでいたボクは、「テーブルはやっぱり遅いなぁ」という固定観念を持ってしまっていました。

危なかったです。


不明点や間違っている部分があれば教えてください。宜しくお願いします。

*1Amazonインスタントストアへのリンクです

*2Amazonインスタントストアへのリンクです

LuisLuis2012/05/30 12:22This is exactly what I was looinkg for. Thanks for writing!

kcqrzggwkcqrzggw2012/05/30 18:547cD2b3 <a href="http://shckrerkmrce.com/">shckrerkmrce</a>

qpahajvwnqpahajvwn2012/05/31 23:08tpfioi <a href="http://ilhtpfxfmarg.com/">ilhtpfxfmarg</a>

dsrvwihwdsrvwihw2012/06/01 21:21Zpq1e6 , [url=http://lmkchwjsnmnt.com/]lmkchwjsnmnt[/url], [link=http://vqajdhrnabhp.com/]vqajdhrnabhp[/link], http://ghuczrchtljr.com/