Je gère ma propre UINavigationBar. J'ai besoin de le faire à cause d'un skinning important. La documentation relative à UINavigationController signale qu'il existe des limites à l'habillage de l'UINavigationBar lorsqu'elle est utilisée avec un UINavigationController.
J'ai mis en place un logging complet et d'après tout ce que je peux dire, le fait d'appuyer sur le bouton "Back" dans le UINavigationController fait sortir deux éléments de la pile au lieu d'un. J'obtiens un rappel de délégué unique qui me dit qu'il supprime l'élément logique, mais il supprime en fait cet élément et un autre.
L'élément ajouté au UINavigationController dans awakeFromNib doit jamais être supprimée. Il est en train d'être supprimé pour une raison quelconque.
Deux questions similaires se posent, mais aucune n'a de réponse satisfaisante. Ces deux questions sont les suivantes :
L'accesseur UINavigationBar .items ne renvoie pas l'UINavigationItem courant
UINavigationBar semble retirer 2 éléments de la pile lors d'un "retour"
- (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];
}
Modifié pour ajouter un débogage pertinent à partir d'une seule exécution :
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: (
)