2009-06-25 20 views
0

私は、ナビゲーションバーに、そしてenabledプロパティがアプリケーション状態に依存するコンテナビューのツールバーサブビューにボタンを持っています。現在のところ、ボタンはviewWillAppearに設定されていますので、ビューから離れて戻ると正しいことが起こります。私は[containerView setNeedsDisplay]がトリックをすると思ったが、いいえ。UIButtonsでビューを更新する方法

(私はtextView.textが変更されたときに更新するように強制することができ、コンテナビューでUITextViewsを有するが、アプリケーションロジックは、明示的に状態が変化すると正しいボタンの全てを更新するために困難であるようなものである。)

+0

viewDidLoadでボタンを設定して、viewWillDisappearで削除しようとしましたか? – prakash

+0

問題は、ビューがまだ表示されている間(つまり、状態がコンテナ内の他のサブビューによって変更されている間)ボタンの状態を変更したいということです。ビューを再ロードしてviewDidLoadまたはviewWillAppearを呼び出す方法、またはそれを行うdrawRectがない別のメソッドがありますか? – iPhoneDollaraire

+0

私は 'enabled'プロパティを変更する状態の変化をキャッチするためにKVOを試しています。私が目を向けなければならないパフォーマンス/メモリの問題がありますか? – iPhoneDollaraire

答えて

0


コード内の任意の場所でナビゲーションバーとツールバーボタンの状態を変更できます。ビューの初期設定では、すでに行ったように、viewWillDisappearとviewWillAppearにいくつかのコードを入れると便利です。

たとえば、textFieldにテキストを追加したときにナビゲーションバーのボタンを 'キャンセル'から '入力'にプログラムで変更したい場合は、新しいUIBarButtonItemを初期化して古いものありました。あなたは、単にまったく同じ方法で、新しいものを作ることによって、そのナビゲーションアイテムを上書きすることができます他の場所であなたのコードで、その後...あなたはそうのようなあなたのviewWillAppearで「キャンセル」ボタンを追加しました

- (void)viewWillAppear:(BOOL)animated { 
self.navigationItem.rightBarButtonItem = 
[[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelAction)] autorelease]; 
} 

を言います。しかし、別のタイトル(ここでは私の例では 'Enter')と多分異なるアクションを与えたいと思うでしょう。


ツールバーに関して、UINavigationControllerは簡単に変更を処理できます。これは、すべてのUINavigationController + UIViewControllerコンボに組み込みのツールバーが付属しているためです。具体的に要求しない限り、表示しないということだけです。 これを行う最善の方法は、UIViewControllerのツールバー項目を設定し、必要に応じてnavigationControllerにツールバーの表示/非表示を依頼することです。

例えば、UIViewControllerの初期化メソッドで3つのUIBarButtonItemインスタンスを作成するとします。次に、それらを配列に貼り付け、その配列をツールバーに割り当てます。私は、ツールバーを表示するためにnavigationControllerを使用することができます

viewWillAppear(またはviewDidAppear)で、その後
[self setToolbarItems:[NSArray arrayWithObjects:button1, button2, button3, nil] animated:NO]; 

方法:

[self.navigationController setToolbarHidden:NO animated:YES]; 

ちょうどビューが離れて行く際に、反対を行うことを覚えている(つまり、同じ呼び出ししかし、setToolbarHidden:YESの場合)。 UIViewControllerのコード内のどの時点でも、[self setToolbarItems:.....]という初期化と同じ方法でボタンを変更できます。

+0

有望そうです...これを試してみたら、もう一度更新します! – iPhoneDollaraire

関連する問題