1

私が構築しているアプリは、UITabBarController フレームワーク内の複数のビュー (およびそのサブビュー) の共有カスタム UIToolbar を表示する必要があります。カスタム ツールバーの内容は、すべてのビューで同じです。カスタム ツールバーを xib として設計し、独自のコントローラー クラスから UI イベントを処理できるようにしたいと考えています (そうするために UIToolbar をサブクラス化できると思いますか?)。そうすれば、IBOutlet や IBAction アイテムなどを定義できます。次に、このカスタム ツールバーを各 UITabBarController ビュー (およびそのサブビュー) に関連付けることができます。しかし、私はそれが可能かどうかを見つけるのに苦労しています - もしそうなら、それを行う方法.

特に、親の UITabBarController タブにそれぞれ関連付けられている UINavigationController ビュー スタックに新しいビューをプッシュできるようにしたいと考えています。要約すると、次のものが必要です。

  • カスタム ツールバー
  • 複数のビューで共有
  • 複数のナビゲーション コントローラによって管理される
  • ナビゲーションコントローラーは、親タブバーコントローラーの異なるタブに関連付けられています

タブ バー コントローラー自体はモーダルで起動されますが、関連性はないと思います。

とにかく、タブ バー コントローラーは機能しており、その子ナビゲーション コントローラーも同様です。共有ツールバーをさまざまなサブビューに保持する方法を理解するのに少し苦労しています。プログラムで実装するためのきれいな方法で解決したいと思いますが、ツールバーのビジュアルデザインを xib に保持する柔軟性を好みます。

誰でも何か提案があります

4

2 に答える 2

4

私は「答え」を持っていると信じています...そしてそれはとても簡単で、今まで思いつかなかったことが恥ずかしいです. UINavigationController のツールバーの属性を設定する UIViewController のカスタム サブクラスを作成します (IB の xib 内から有効に設定します)。次に、ツールバーに含めたい他のビューから、そのクラスをサブクラス化します。私の場合、UIViewController の ChallengeToolbar サブクラスに名前を付けてから、次のようにしました。

UIImage *vaultImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"goldbar" ofType:@"png"]];
UISegmentedControl *vaultButtonControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:vaultImage, nil]];
vaultButtonControl.segmentedControlStyle = UISegmentedControlStylePlain;
vaultButtonControl.momentary = YES;
[vaultButtonControl addTarget:self action:@selector(goNavVault:) forControlEvents:UIControlEventAllEvents];
UIBarButtonItem *vaultButton = [[UIBarButtonItem alloc] initWithCustomView:vaultButtonControl];
vaultButton.customView.frame = CGRectMake(0,0,40,20);

UIBarButtonItem *invite = [[UIBarButtonItem alloc] initWithTitle:@"Invite" style:UIBarButtonItemStyleBordered target:self action:@selector(goNavVault:)];

UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *items = [NSArray arrayWithObjects: invite, flexItem, flexItem, flexItem, vaultButton, nil];
[self setToolbarItems:items animated:NO];
[vaultButtonControl release];
[vaultButton release];
[invite release];
[flexItem release];

... viewDidLoad メソッド内。次に、ツールバーを表示したい任意のビューから、ビューのコントローラ クラスをセットアップして、UIViewController の代わりに ChallengeToolbar クラスをサブクラス化します。当たり前!

于 2010-05-29T00:53:09.240 に答える
1

いくつかの最初の考え。

おそらく、このツールバーをタブバーの範囲外に保持し、ツールバーから発生したイベントを画面上のビューに伝達するだけにすることをお勧めします。

現状では、ツールバーは複数のビューを管理しており、コントローラー内の特定のビューの上にコンポーネントをフローティングさせることはできないと思います。

私は通常、UI をプログラムでコーディングして、正確に制御できるようにしています。そのため、Interface Builder からこれを管理するのがどれほど簡単かは言えません。

于 2010-05-28T00:51:44.247 に答える