/ Odkiaľ pochádza tento backBarButtonItem? - regulátor pri spúšťaní, ovládaè tlaèidiel, spätné tlaèidlo

Odkiaľ pochádza tento backBarButtonItem? - uinavigationcontroller, pushviewcontroller, backbarbuttonitem

Mám UINavigationController (A), ktorý má niekoľko subviews, ktoré sú tiež UIViewControllers (B a C). Hlavné UINavigationController (A) jazdí vo vnútri UITabViewController (D).

Snažím sa tlačiť ovládač zobrazenia v B: [self.navigationController pushViewController... etc]

Teraz, backBarButtonItem prechádza snesprávny text. Namiesto toho, aby povedal "Späť", to jednoducho hovorí "Item". Je to pravdepodobné, pretože jeden z kontrolérov v mojom reťazci má svoj názov nastavený na "Položka" alebo možno je to celkom nula.

Moja otázka znie, odkiaľ je vytvorený backBarButtonItem?

Vyskúšal som niekoľko rôznych vecí, ktoré nefungovali, vyskúšal som každý z týchto riadkov kódu v B tesne pred tým, ako som tlačil kontrolór pohľadu.

self.presentingViewController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

self.navigationController.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"... etc

Ja by som sa rád naučil princíp tu, aby som naozaj pochopil, kde je táto položka obývaná a aký je správny spôsob, ako to urobiť.

odpovede:

2 pre odpoveď č. 1

Povedzme vaše C je v hornej časti zásobníka navigačného ovládača a váš. \ t B regulátor. Napr.

navigationController.viewControllers = @[ bViewController, cViewController ];

Zobrazí sa navigačný ovládač cViewController.view.

Navigačný ovládač používa na konfiguráciu spätného tlačidla druhý radič na svojom zásobníku. V tomto prípade používa bViewController na konfiguráciu tlačidla Späť. Toto je jeho algoritmus:

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