2009-07-02 12 views
25

私はNavigation-Based iPhoneアプリを書いています。UIToolViewをツールバーとナビゲーションバーの間でスクロールしながら、画面の下にUIToolBarをドッキングさせたいと思います。ツールバーをUITableViewに追加する正しい方法は何ですか?

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

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

答えて

49

は内蔵のツールバーがあり、それが表示されるようにするには:。

[self.navigationController setToolbarHidden:NO]; 

implmentingで:

あなたのビューコントローラで
- (void)setToolbarItems:(NSArray *)toolbarItems animated:(BOOL)animated 

、あなたが項目を設定することができますツールバーの

これで、階層にツールバーがどこにあるか心配する必要がなくなりました。

(補正タイプミス)

2

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

個人的に私は多くの開発者が単一のモノリシックビューコントローラクラスでこの機能すべてを提供することに執着しているようで、ビュー内にテーブルビューを持つためUITableViewControllerのサブクラスを使用する必要があることがわかります。しかし、私はSingle Responsibility Principleと思っていますが、複雑さが単純なもの以外の場合は、データソースを壊して別のクラスに委任することがよくあります。また、コードは、特定のUIViewController実装に関連付けられていません。

別のデータソース/デリゲートクラスがある状況では、コードビルダーではなくInterface Builderを使用してテーブルビューにそれらを構築して配線することがよくあります。この方法(少なくとも私にとっては)はDependency Injectionの精神であり、いくつかのボイラープレートコードの書き出しを省き、ある程度のレベルのdecouplingを提供します。

これらの選択肢は、達成しようとしている機能の複雑さの影響を受けます.JITableViewControllerを使用して自分自身が見つけられるかもしれない簡単な実装です。 OS 3.0ナビゲーションコントローラのよう

9

コーリーフロイドが "setToolbarHidden" の "B" は小文字でなければならない、ある

[self.navigationController setToolbarHidden:NO]; 

されるべきであることを

[self.navigationController setToolBarHidden:NO]; 

除いて、ほとんどが正しいです。 animatedパラメータを省略すると、あまりにも動作するようですけれどもまた、iPhone OS Referenceに記載されているメソッド名が実際に

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated 

です。

+0

oops、が修正されました。 –

0

この試してみてください:

self.navigationController.toolbarHidden = NO; 

は、それはあなたのお役に立てば幸いです。

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]; 
関連する問題