2010-12-07 14 views
3

私は困惑しています。私はUINavigationControllerを使用していますが、1つのビューで戻るボタンを隠そうとしています。しかし、私はそれを行うと、次のレベルのビューに戻るボタンも隠します。iPhone - UINavigationItem - 戻るボタンを隠す

[self.navigationItem setHidesBackButton:YES animated:NO]; 

そして- (void)viewWillDisappear:(BOOL)animatedに私が持っている:私は- (void)viewWillAppear:(BOOL)animated

[self.navigationItem setHidesBackButton:NO animated:NO]; 

これは単なるバックボタンを作ることが正しいの機能であるように思われる(それが去る直前に表示されますその呼び出し)。したがって、私は疲れて、次のビューの- (void)viewWillAppear:(BOOL)animated

[self.navigationItem setHidesBackButton:NO animated:NO]; 

を置くために、まだ機能しないこと。

self.navigationItem.backBarButtonItemは、ビューの直下のビュー(ref)のビューであるときに、そのビューの戻るボタンが参照されるため、少し混乱します。しかし、self.navigationItem.hidesBackbuttonは、それがトップビュー(ref)のときに戻るボタンが表示されるかどうかです。それで、なぜ次のビューの戻るボタンを隠すのか誰にも分かりませんか?

別の奇妙なことは、別のビューを表示したときに機能することです。より視覚的に表現するには、次のビューがあるとします。

A > B > C > D 

Bは私が心配しているビューです。私はAに行く戻るボタンを隠したいと思います。私がそれをすると、Cのバックボタンも隠します。しかし、私がDに行った場合、戻るボタンが現れ、すべてが「必要」のように機能します。つまり、私はCに戻り、Bに戻ることができます。Bにはボタンが隠されています.Cに戻ると、戻るボタンが表示されます。

アイデア?

答えて

9

UINavigationControllerを扱うときに、戻るボタンの表示と非表示に関する何らかのバグがあるようです。あなたと同様の問題はbackButton of NavigationController don't appearです。

私はこれに関するいくつかのテストを行いましたが、ここでは説明しませんが、あなたに役立ついくつかの提案があります。

  • のみどこでもself.navigationItem.hidesBackButtonを使用しないでくださいviewDidAppear:ない
  • viewWillAppear:にしてsetHidesBackButton:animated:に呼び出しを行います。
+2

感謝を。それをviewDidAppearに置くと助けになりました。スプリット秒間に点滅するのを止める方法はありますか? – RyanJM

1

私は、戻るボタンを隠しても、ユーザーがそれをクリックするのを妨げることはないと思いますか?

クリックを防止するには、これをnilに設定する必要があります。

self.navigationItem.leftBarButtomItem = nil; 

"B"のviewWillAppearメソッドで新しい戻るボタンを作成することができます。

4

この愚かなバグで取得するには、私はすべてsetHidesBackButtonを実装しませんでしたが、のviewDidLoadで、私は次のように置く:答えのための

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc] init]]; 
+0

ありがとう、私はまったく同じ問題を経験し、あなたの回避策が役立ちます! – dbau

関連する問題