Mam kontroler UINavigationController (A), który ma kilka podpowiedzi, które również są UIViewControllers (B i C). Główny kontroler UINavigationController (A) porusza się wewnątrz kontrolera UITabViewController (D).
Próbuję wcisnąć kontroler widoku w B:
[self.navigationController pushViewController... etc]
Teraz backBarButtonItem przechodzi przezzły tekst. Zamiast mówić „Powrót”, po prostu mówi „Przedmiot”. Jest to prawdopodobne, ponieważ jeden z kontrolerów widoku w moim łańcuchu ma swój tytuł ustawiony na „Element”, a może w ogóle jest pusty.
Moje pytanie brzmi: skąd jest generowany backBarButtonItem?
Wypróbowałem kilka różnych rzeczy, które nie działały. Próbowałem każdego z tych wierszy kodu w B tuż przed naciśnięciem kontrolera widoku.
self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc
Chciałbym nauczyć się tutaj zasady, aby naprawdę zrozumieć, gdzie jest wypełniany ten przedmiot i jaki jest właściwy sposób.
Odpowiedzi:
2 dla odpowiedzi № 1Powiedzmy twoje C
kontroler znajduje się na szczycie stosu kontrolera nawigacyjnego i na twoim B
kontroler jest pod tym. Na przykład.
navigationController.viewControllers = @[ bViewController, cViewController ];
Wyświetla się kontroler nawigacji cViewController.view
.
Kontroler nawigacyjny korzysta z drugiego kontrolera na stosie, aby skonfigurować przycisk Wstecz. W tym przypadku używa bViewController
skonfigurować przycisk Wstecz. Oto jego algorytm:
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";
}