Zarządzam moim własnym UINavigationBar. Muszę to zrobić ze względu na rozległe skórki. Dokumentacja dla UINavigationController ostrzega, że istnieją ograniczenia dotyczące skórowania paska UINavigationBar, gdy jest on używany z kontrolerem UINavigationController.UINavigationBar topItem/items wydaje się podwójnie pop z tyłu
Wprowadziłem obszerne rejestrowanie i ze wszystkiego, co widzę, naciśnięcie przycisku "Wstecz" w panelu UINavigationController powoduje wyjęcie dwóch elementów ze stosu zamiast jednego. Otrzymuję pojedyncze wywołanie od uczestnika mówiące mi, że usuwa on element logiczny, ale faktycznie usuwa ten jeden i jeszcze jeden.
Element dodany do elementu UINavigationController w awakeFromNib powinien być nigdy nie może być usunięty. Jest usuwany z jakiegoś powodu.
Istnieją dwa podobne pytania, ale nie ma zadowalających odpowiedzi. Te dwa pytania:
UINavigationBar .items accessor doesn't return the current UINavigationItem
UINavigationBar seems to pop 2 items off stack on "back"
- (void)awakeFromNib {
[headerView setDelegate: self];
[headerView pushNavigationItem: tableDisplay animated: NO];
}
- (void) selectedStory: (NSNotification *)not {
[headerView pushNavigationItem: base animated: NO];
NSLog(@"Selected story: %@", base);
}
- (void) baseNav {
NSLog(@"Current items: %@", [headerView items]);
BaseInnerItem *current = (BaseInnerItem *)[headerView topItem];
[self addSubview: [current view]];
}
- (BOOL)navigationBar: (UINavigationBar *)navigationBar shouldPushItem: (UINavigationItem *)item {
return YES;
}
- (BOOL)navigationBar: (UINavigationBar *)navigationBar shouldPopItem: (UINavigationItem *)item {
return YES;
}
- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item {
NSLog(@"didPushItem: %@", item);
[self baseNav];
}
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {
NSLog(@"didPopItem: %@", item);
[self baseNav];
}
Edited by dodać odpowiednie debugowanie z jednego biegu:
2010-10-13 02:12:45.911 Remix2[17037:207] didPushItem: <TableDisplay: 0x5d41cc0>
2010-10-13 02:12:45.912 Remix2[17037:207] Current items: (
"<TableDisplay: 0x5d41cc0>"
)
2010-10-13 02:12:49.020 Remix2[17037:207] didPushItem: <WebDisplay: 0x591a590>
2010-10-13 02:12:49.021 Remix2[17037:207] Current items: (
"<TableDisplay: 0x5d41cc0>",
"<WebDisplay: 0x591a590>"
)
2010-10-13 02:12:49.023 Remix2[17037:207] Selected story: <WebDisplay: 0x591a590>
2010-10-13 02:12:59.498 Remix2[17037:207] didPopItem: <WebDisplay: 0x591a590>
2010-10-13 02:12:59.499 Remix2[17037:207] Current items: (
)
Mam dokładnie ten sam problem, ale pozwoliłem kontrolerowi nawigacji obsłużyć mój niestandardowy pasek nawigacji ze skórą. Czy znalazłeś odpowiedź na to pytanie? – mmmattias