コード内の任意の場所でナビゲーションバーとツールバーボタンの状態を変更できます。ビューの初期設定では、すでに行ったように、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:.....]という初期化と同じ方法でボタンを変更できます。
viewDidLoadでボタンを設定して、viewWillDisappearで削除しようとしましたか? – prakash
問題は、ビューがまだ表示されている間(つまり、状態がコンテナ内の他のサブビューによって変更されている間)ボタンの状態を変更したいということです。ビューを再ロードしてviewDidLoadまたはviewWillAppearを呼び出す方法、またはそれを行うdrawRectがない別のメソッドがありますか? – iPhoneDollaraire
私は 'enabled'プロパティを変更する状態の変化をキャッチするためにKVOを試しています。私が目を向けなければならないパフォーマンス/メモリの問題がありますか? – iPhoneDollaraire