私はUIViewController(BとC)もあるいくつかのサブビューを持つUINavigationController(A)を持っています。メインのUINavigationController(A)は、UITabViewController(D)の内部に乗っています。
私はB内でビューコントローラをプッシュしようとしています:
[self.navigationController pushViewController... etc]
さて、backBarButtonItemは間違ったテキスト。 「戻る」と言うのではなく、単に「アイテム」と言います。これは、私のチェーン内のView Controllerの1つがタイトルを「Item」に設定しているか、まったく同じでないかもしれないからです。
私の質問は、どこから生成されたbackBarButtonItemですか?
ビューコントローラをプッシュする前に、これらのコード行をB内で試してみましたが、どちらも機能しませんでした。
self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
私はこの原則をここで学びたいので、このアイテムがどこから取り込まれているのか、正しい方法は何かを本当に理解することができます。
回答:
回答№1は2あなたのことを言ってみましょう C
コントローラがナビゲーションコントローラのスタックの上にあり、 B
コントローラーはその下にあります。例えば。
navigationController.viewControllers = @[ bViewController, cViewController ];
したがって、ナビゲーションコントローラは、 cViewController.view
.
ナビゲーションコントローラは、スタック上の2番目のコントローラを使用して戻るボタンを設定します。この場合、 bViewController
戻るボタンを設定します。これはそのアルゴリズムです:
UINavigationItem *navigationItem = bViewController.navigationItem;
UIBarButtonItem *barItem = navigationItem.backBarButtonItem;
if (barItem.image != nil) {
show a back button containing barItem.image;
}
else if (barItem.title != nil) {
if (barItem.title.length > 0) {
show a back button containing barItem.title;
} else {
don"t show a back button;
}
}
else if (navigationItem.title != nil) {
if (navigationItem.title.length > 0) {
show a back button containing navigationItem.title;
} else {
don"t show a back button;
}
}
else {
show a back button containing @"Back";
}