/ / Skąd wziął się ten backBarButtonItem? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

Skąd pochodzi ten backBarButtonItem? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

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 № 1

Powiedzmy 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";
}