10

データ階層をナビゲートするアプリを作成したい。この階層の構造は、次の画像に示しているようなものです。構造のブランチは、他のブランチよりも多くのレベルを持つ可能性があります。

ここに画像の説明を入力してください

次のようなTableViewsを使用してこの構造をドリルダウンしたいと思います。

    A > AA > AAB > AABA

また

    A > AB > ABA

知りたいのは、ストーリーボードにTableViewControllerを1つだけ入れ、それを再利用して新しいレベルのデータを表示できるかどうかです。tableviewcontrollers階層が3、4、または100レベルになるかどうかわからないため、ストーリーボードに多数のリンクを設定したくありません。

4

2 に答える 2

7

ストーリーボードに 1 つの VC のみを描画して任意の深さまで再帰するには、ストーリーボードを使用してトップ レベル (ルートにテーブル ビュー コントローラーを持つナビゲーション コントローラー) を描画します。テーブル vc は UITableView サブクラスである必要があり、ストーリーボードにストーリーボード識別子が必要です (「MyCustomTableVC」など)。

MyCustomTableVC に、モデル内のどのノードを表示する必要があるかを示すパブリック プロパティ (ModelItem *node など) を指定します。

ストーリーボード セグエの代わりに、テーブル vc が取得didSelectRowAtIndexPathされると、それ自体の別のインスタンスを作成します...

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];
// Imagine it's called MyCustomTableVC
MyCustomTableVC *newVC = (MyCustomTableVC*)[mainStoryboard 
                    instantiateViewControllerWithIdentifier: @"MyCustomTableVC"];

newVC モデル ノードを選択したアイテム (モデル内の indexPath.row のアイテム) に設定し、そこにプッシュします...

// making up a lot of stuff about your model here, but hopefully you get the idea...
newVC.node = [self.model objectAtIndex:indexPath.row];
[self.navigationController pushViewController:newVC animated:YES];

このアプローチには、アニメーション化されたプッシュとポップ、戻るボタンなど、すべてのナビゲーション コントローラーの動作を取得できるという利点があります。

于 2013-02-27T15:57:34.963 に答える
1

もちろん、を再利用できますUITableView。にUITableViewは2つの基本的な部分、UITableViewDelegateとがありUITableViewDataSourceます。

UITableViewDelegate多くのテーブルの相互作用といくつかの表示特性(heightForRowAtIndexPathなど)を制御します。行を選択するとどうなりますか。行を選択することもできますか?

UITableViewDataSourceよく、データのソースです。テーブルにはいくつのセクションがありますか?各セクションには何行ありますか?セクションX、行Yのセルの内容は何ですか?

たとえば、階層内のテーブルごとに同じものUITableViewを使用できますが、を変更します。データソースを変更したいときは、次のようなことをするかもしれません...UITableViewDelegateUITableViewDataSource

if (isSingingBand) {
    self.tableview.dataSource = [TableABBADataSource alloc] init];
} else {
    self.tableview.dataSource = [TableAABDataSource alloc] init];
}
[self.tableview reloadData];

テーブルビューに関するAppleのプログラミングガイドは、実装方法に遭遇する可能性のある多くの質問に答えるはずです。

于 2013-02-27T15:30:54.240 に答える