24

ナビゲーションベースのiPhoneアプリを作成していますが、UIToolBarを画面の下部にドッキングし、UITableViewをツールバーとナビゲーションバーの間でスクロールさせたいと考えています。

このビューを処理するViewControllerは、UITableViewControllerではなく標準のUIViewControllerであることが提案されているフォーラムをいくつか見てきました。ビューコントローラは、すべての標準UIViewControllerオーバーライドに加えて、UITableViewデリゲートメソッドとデータソースメソッドを実装する必要があります。UITableViewControllerのように機能させるには、前述のプロトコル以外に、このView Controllerサブクラスで再作成する必要のある組み込み機能(ある場合)は何ですか?このルートで失ったものはありますか?

または、標準のUIViewController内にUITableViewControllerをネストする方がよいでしょうか。

4

5 に答える 5

48

OS 3.0 の時点で、Navigation Controller にはツールバーが組み込まれています。ツールバーを表示するには:

[self.navigationController setToolbarHidden:NO];

実装することにより:

- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated

ビュー コントローラーで、ツールバーの項目を構成できます。

そのため、ツールバーが階層内のどこにあるかを気にする必要がなくなりました。

(誤字修正)

于 2009-07-02T08:54:26.903 に答える
7
//Tool bar
[self.navigationController setToolbarHidden:NO];

UIBarButtonItem *buttonItem = [[ UIBarButtonItem alloc ] initWithTitle: @"Select All"
                                                style: UIBarButtonItemStyleBordered
                                               target: self
                                               action: @selector(selectAll:) ];
UIBarButtonItem *buttonNext = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleBordered target:self action:@selector(goNext:)];
self.toolbarItems = [ NSArray arrayWithObjects: buttonItem, buttonNext, nil ];

[ buttonItem release ];
[buttonNext release];
于 2012-05-16T23:24:16.493 に答える
2

必要なのは、必要なテーブル ビュー機能のレベルに必要な UITableViewDelegate および UITableViewDatasource メソッドを実装することだけです。これらのメソッドは任意のクラスに含めることができますが、これらのクラスは関連するプロトコルに準拠する必要があります。デリゲートとデータソースは、プログラムまたは Interface Builder を使用して UITableView インスタンスに設定する必要があります。ドキュメントによると、いくつかの機能失われます -概要セクションを参照してください。

個人的には、多くの開発者がこのすべての機能を単一のモノリシック ビュー コントローラー クラスで提供することに執着しているように見えます。ビューにテーブル ビューがあるため、UITableViewController のサブクラスを使用する必要があります。ただし、私は単一の責任の原則を検討するのが好きで、複雑さが単純ではない場合、データソースとデリゲートを別々のクラスに分割することがよくあります。また、コードは特定の UIViewController 実装に関連付けられていません。

個別のデータソース/デリゲート クラスがある状況では、コードではなく Interface Builder を使用してそれらを作成し、テーブル ビューに接続することがよくあります。このアプローチは (少なくとも私にとっては) Dependency Injectionの精神に基づいており、いくつかのボイラープレート コードの作成を節約し、ある程度のデカップリングを提供します。

もちろん、これらの選択は、達成しようとしている機能の複雑さに影響されます。単純な実装では、UITableViewController を使用していることに気付くかもしれません。

于 2009-07-02T05:25:35.430 に答える
0

これを試してください:

self.navigationController.toolbarHidden = NO;

お役に立てば幸いです。

于 2011-10-12T13:11:16.403 に答える