質問

次の方法で、コントローラーのviewdidappearでバックボタンアイテムのタイトルを変更します。

self.navigationcontroller.navigationbar.backitem.title = @"pretio";

それはタイトルを適切に変えますが、私は奇妙な振る舞いをしています。 「前の」ボタンを選択すると、スタック内にあるコントローラーのタイトルが変更されます(つまり、親コントローラーには「前」のタイトルがあります。

なぜこれが起こったのですか?

役に立ちましたか?

解決

ナビゲーションコントローラーを使用しているときは、[self settitle:@"title"]を呼び出します。スタック内の任意のビューコントローラーの内部は、ナビゲーションバーのタイトルを設定します。これは、新しいビューコントローラーをプッシュしたときに、バックボタンにデフォルトで使用されるタイトルでもあります。どうやら、あなたが経験していることから、BackItemのタイトルを明示的に設定することで、ビューコントローラーの-Settitleへの呼び出しで指定されたものをオーバーライドする前のビューコントローラーのナビゲーションバータイトルにも設定します。

おそらく、ナビゲーションスタック内のビューコントローラー内からタイトルを管理する方が良いでしょう。新しいビューコントローラーをプッシュするときは、これを行います。

[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;

次に、次のビューコントローラーが表示されると、「前」と言ったバックボタンが表示されます。今、あなたはそれをその本当のタイトルが-viewwillappearにあるべきものに戻って変更する必要があります:

- (void)viewWillAppear:(BOOL)animated;
{
    [self setTitle:@"Real Title"];
    [super viewWillAppear:animated];
}

少しハッキーに感じるかもしれませんが、ナビゲーションバーの機能をオーバーライドしようとするよりはましです。 Nav Bar/Nav Controller Stackと格闘することは非常にイライラする可能性があります。

よろしくお願いします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top