いくつかの計算を行っているビューがあり、この間にbackButtonを非表示にしたいとします。UINavigationBarでbackButtonの表示を動的に変更する
私は背中のボタンを持つ新しいコントローラを開いて、Aボタンをキャンセルするためにこれを使用します。
[self.navigationController pushViewController:calcController animated:YES];
これは、すべてのメインスレッドで、私は計算を開始する方法である:
- (void)startSth {
self.viewMode = modeRunning;
[self updateButtons];
[self performSelector:@selector(doSth) withObject:nil afterDelay:0.1];
}
- (void)doSth {
...
self.viewMode = modeFinished;
[self updateButtons];
}
これはボタンの表示を切り替える方法です:
- (void)updateButtons {
BOOL busy = (self.viewMode==modeRunning);
self.navigationItem.hidesBackButton = busy; //back button
self.navigationItem.rightBarButtonItem.enabled = !busy; //cancel button
}
問題:最初は期待どおりに動作し、ボタンは非表示になり、再び表示されます。 戻るボタンをクリックすると、ビューがポップされます。 2回目の実行では、ボタンが最初から実行されていません。メソッドupdateButtonsが2回呼び出され、変数self.viewModeが記録され、ビジーで正しい動作(最初は1回目と0回目)が表示されるため、明らかにhidesBackButtonの呼び出しは機能しません。
また、カスタムの空のボタンを使用して、setNeedsDisplayまたはsetHidesBackButton:animated :,すべてを成功させることなく、navigationItem.backButtonの設定をnilにした例を試しました。
アイデア?