2013-02-27 13 views
9

で階層データをドリルダウンします。この階層の構造は、次のイメージで示しているようなものです。構造の分岐は、他のものより多くのレベルを持つことができます。私はデータ階層をナビゲートするアプリを構築したいのUITableView

enter image description here

私はドリルダウンするために、この構造を、このようなTableViewsと希望:

A > AA > AAB > AABA 

または

A > AB > ABA 

私が知りたいのですがどのような私が唯一持っていることができるかどうかであります1つのTableViewControllerを私のストーリーボードに追加し、新しいレベルのデータを表示するために再利用しますか? 私はわからないので、私は3、4、または100レベルの階層を持つことになります場合、私は私のストーリーボードで一緒にリンクされtableviewcontrollersの束を持っている必要はありません。

答えて

7

ストーリーボードで塗りつぶされた1つのVCだけで任意の深さに反復するには、ストーリーボードを使用してトップレベルをペイントします。テーブルvcはUITableViewサブクラスで、ストーリーボードにストーリーボード識別子(たとえば、 "MyCustomTableVC")があります。

MyCustomTableVC公共財産を与える(例えば、ModelItem *ノード)が提示しなければならないモデル内のどのノードを示しています。代わりに、ストーリーボードseguesの

、テーブルのVCはdidSelectRowAtIndexPathを取得し、それ自体の別のインスタンスを作成している... indexPathであなたのモデルで選択した項目(項目にnewVCモデルのノードを設定し

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

.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]; 

このアプローチは、すべてのナビゲーションコントローラの動作を得ることの利点を持っている:アニメーションプッシュとポップ、バックボタンなど

+0

私はこのソリューションを試してみましたが、機能しますが、ナビゲーションバーが消えてしまったので、以前のレベルの階層に戻る方法はありません。何かご意見は? – jarz

+0

私が考えることができるのは、あなたがself.navigationController ** push **をしていることを確認することだけです。 – danh

+0

@danhノードによってはどういう意味ですか?迅速に3でこれをやる方法を偶然知っていますか? – Number1

1

確かに、あなたはUITableViewを再利用することができます。 UITableViewには、2つの基本的な部分、UITableViewDelegateUITableViewDataSourceがあります。

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

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

たとえば、階層内の各テーブルに同じUITableViewUITableViewDelegateを使用できますが、UITableViewDataSourceを変更することができます。あなたは、データ・ソースを変更したい場合は、あなたが何かなどを行う可能性があります...

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

Apple's programming guide on Table Viewsあなたはどのように実装する可能性もあります多くの質問に答える必要があります。

関連する問題