次の方法で、コントローラーの viewDidAppear で戻るボタンの項目のタイトルを変更しています。
self.navigationController.navigationBar.backItem.title = @"前";
タイトルはちゃんと変えてるんだけど、なんか挙動がおかしくて。「前へ」ボタンを選択すると、スタックにあるコントローラーのタイトルが変更されます (つまり、親コントローラーのタイトルが「前へ」になりました。
なぜこれが起こったのですか?
次の方法で、コントローラーの viewDidAppear で戻るボタンの項目のタイトルを変更しています。
self.navigationController.navigationBar.backItem.title = @"前";
タイトルはちゃんと変えてるんだけど、なんか挙動がおかしくて。「前へ」ボタンを選択すると、スタックにあるコントローラーのタイトルが変更されます (つまり、親コントローラーのタイトルが「前へ」になりました。
なぜこれが起こったのですか?
ナビゲーションコントローラーを使用している場合は、[self setTitle:@"Title"]を呼び出します。スタック内の任意のViewControllerの内部で、ナビゲーションバーのタイトルが設定されます。これは、新しいViewControllerを押したときにデフォルトで戻るボタンに使用されるタイトルでもあります。どうやら、あなたが経験していることから、backItemのタイトルを明示的に設定すると、以前のView Controllerのナビゲーションバーのタイトルにも設定され、ViewControllerの-setTitleの呼び出しで指定されたものが上書きされます。
ナビゲーションスタックのViewController内からタイトルを管理する方がよいでしょう。新しいViewControllerをプッシュする場合は、次のようにします。
[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;
これで、次のView Controllerが表示されたら、「Previous」と書かれた戻るボタンが表示されます。これで、実際のタイトルを-viewWillAppearに戻す必要があります。
- (void)viewWillAppear:(BOOL)animated;
{
[self setTitle:@"Real Title"];
[super viewWillAppear:animated];
}
少しハッキーに感じるかもしれませんが、ナビゲーションバーの機能を上書きしようとするよりはましです。ナビゲーションバー/ナビゲーションコントローラースタックと格闘することは、非常に苛立たしいことです。
よろしくお願いします。