« iphone用アプリ「乱語」サポートページ | トップページ | iphone 開発 サンプル「Simple Undo」を読む。 »

2010年7月 6日 (火)

UITableViewについて

・前提
Interface Builder(IB)は、使用しません。

iphoneでリスト形式の表示をするときは、UITableViewを使います。
[図1挿入]
1


その方法として、UITableViewControllerを利用する方法があります。

ただ、この方法では、画面全体にテーブルが描画されるため、
UIToolBarをテーブルの下部に入れるときなどに問題があります。

具体的には、ツールバーをサブビューとして追加すると、
テーブルをスクロールしたときに、
ツールバーも同様にスクロールして移動してしまいます。

解決案として、UITableViewControllerは使用せずに、
UIViewControllerを使用する方法を紹介します。

UITableViewControllerとツールバーを併存させる方法はあるかもしれませんが、
UITableViewを直接操作する方が柔軟性が高いでしょう。

ネットで検索すると、UITableViewControllerを直で使うケースは稀だよ、となってたりもします。

製品ドキュメントをUITableViewで検索し、重要な部分を翻訳します。
-----------------------------------------------------------------------------------
UITableViewオブジェクトは、データソースとしてふるまうオブジェクトと、
デリゲートとしてふるまうオブジェクトを持つ必要がある。

典型的には、これらは、アプリケーションのデリゲートであるか、もっとも頻繁な場合だと、
カスタムなUITableViewControllerオブジェクトである。

データソースはUITableViewDataSourceプロトコルを採用する必要がある。

また、デリゲートはUITableViewDelegateプロトコルを採用する必要がある。

UITableViewDataSourceプロトコル
required methodは以下)
– tableView:cellForRowAtIndexPath:
– tableView:numberOfRowsInSection:

UITableViewDelegateプロトコル
required methodはなし、必要そうなもの)
– tableView:didSelectRowAtIndexPath:
– tableView:editingStyleForRowAtIndexPath:
-----------------------------------------------------------------------------------
テーブルビューのプロパティ、delegate/dataSourceに、上記プロトコルを採用したオブジェクトを
持たせる必要がある、ということでしょう。

最小限の機能のサンプルソースを作りました。
(ソネットのプロバイダー契約が切れたため、下記リンクは無効になりました。
リクエストがあれば、なんとか、どこかにアップします。)

実行すると、画面の一部にテーブルビューを描画します。
[図2挿入]
2


サンプルソース

・サンプルソースの解説

サンプルソースでは、delegate/dataSourceをそれぞれを別のクラスにしました。

UITableViewを持つビューコントローラ
@interface TableViewTestViewController : UIViewController {
UITableView *tableView;
}

データソース
@interface MyDataSource : NSObject {
NSMutableArray *array;
}

デリゲート
@interface MyDelegate : NSObject {

}

データソースは、NSMutableArrayを所持しており、これは自身のinitメソッドで初期化しています。
デリゲートは、プロトコルに必須メソッドがないため、実態は空です。

ビューコントローラで、tableViewを生成し、サブビューに追加することで画面に描画します。

これだけで表示できるようですが、UITableViewControllerの製品ドキュメントに、下記の記述があります。
-----------------------------------------------------------------------------------
テーブルビューが最初に描画されるとき、テーブルビューコントローラは、データソースを再読込する。
またテーブルビューが表示されるとき、選択状態を常にクリアする。これは、viewWillAppearメソッドで行う。

テーブルビューがあらわれたとき、コントローラはスクロール指示を初期化する。
これは、viewDidAppearメソッドで行う。

ユーザがEdit/Doneをタップしたときのために、スーパークラスのsetEditing:animated:を実行します。
-----------------------------------------------------------------------------------
UITableViewControllerと同等の機能をUIViewControllerで実施するためには、
これらを明示的に行う必要があります。

これに関して、以下のURLを参考にさせていただきました。
http://d.hatena.ne.jp/KishikawaKatsumi/20090121/1232548786

以上

|

« iphone用アプリ「乱語」サポートページ | トップページ | iphone 開発 サンプル「Simple Undo」を読む。 »

iphone開発」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1049865/35653692

この記事へのトラックバック一覧です: UITableViewについて :

« iphone用アプリ「乱語」サポートページ | トップページ | iphone 開発 サンプル「Simple Undo」を読む。 »