1

ビューがUINavigationControllerスタックにプッシュされて表示された後、特定の状況(たとえば、その画面上でデータが編集中のとき)で戻るボタンを無効にする必要があります。現在のビューに表示されるbackBarButtonItemを無効にする方法はありますか?

以下は、[戻る]ボタン

self.navigationItem.hidesBackButton=YES; 

を隠しますが、私はそれを無効にする必要があります。

これを隠す方法や最初に表示しない方法については、いくつかの回答がありますが、実装する必要はありません。

+0

私はこれを解決するために、カスタムleftBarButtonItemビューを作成し、アクションを現在のビューのView Controllerにポップするようにしました。残念ながら、標準的な左矢印ボタンを取得する簡単な(そして合法的な)方法はありません。 – ChrisP

+0

標準の左/右矢印ボタンの新しい列挙を追加するために、apple.comに機能要求を追加しました。 – ChrisP

答えて

0

navigationControllerのナビゲーションバーデリゲートのデリゲートメソッドの1つを実装できます。 [UINavigationBarDelegate navigationBar:shouldPopItem:]メソッドを見てください。

このメソッドからYESまたはNOを返すと、戻るボタンが有効または無効になります。

+0

このメソッドは、アイテムが有効な状態ではなくナビゲーションバーから追加(プッシュ)または削除(ポップ)されるかどうかを制御しませんか? – ChrisP

+0

このデリゲートセレクタはコントローラではなくナビゲーションバーのみに責任があるので、これほどシンプルではありません。このデリゲートセレクタを実装してYESを返すと、ツールバーはポップしますが、コントローラには表示されません。私はコントローラーをポップしようとしていないが、これをやろうとしている人の話を読んで、アニメーションのタイミングを正しく得ることができなくなってしまった。 – tyler

0

あなたは1 leftBarButtonItem(目に見えないと効果なし) があなたの現在のビュー(self.navigationItem.leftBarButtonItem) にそれを追加し、戻るボタンにアクセスするには、それを削除し実装することができます。

0

あなたは全体のナビゲーションバーが無効になっていることを罰金している場合は、簡単な解決策は、あなたが有効に維持したい他のバーのボタンを使用している場合、これは動作しませんもちろん

self.navigationController.navigationBar.userInteractionEnabled = NO; 

です。

関連する問題