Bonjour,

Ma question concerne une customization de UINavigationBar que je souhaite garder sur chaque vue pushée. Je m'explique :

J'ai un MainViewController dans lequel est "embeded" un NavigationController. J'ai customizé la NavigationBar comme ci dessous (TopBarViewController est chargé de géré le clic sur les boutons custom de la NavigationBar):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
-(void) buildToolBar
{
   // Add the TopBarView Controller
    self.topBarController = [[TopBarViewController alloc] init];
    UIBarButtonItem *buttonItems  =[[UIBarButtonItem alloc] initWithCustomView:self.topBarController.view];
    self.navigationItem.rightBarButtonItem = buttonItems;
    buttonItems = nil;
}
Ca marche super ! Sauf que lorsque je change de vue en y pushant une nouvelle dans la pile, la customization disparait.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Pushing a new view
DetailView_familyViewController *detailView = [[DetailView_familyViewController alloc] initWithNibName:@"DetailView_family" bundle:nil];
[self.navigationController pushViewController:detailView animated:YES];
detailView = nil;
J'aurais souhaité que cette customization soit visible sur l'ensemble des vues pushées / poppées. J'imagine que c'est un besoin souvent requis dans les applis. Quel pattern devrais-je employer ? Une solution serait de recopier la customization dans toutes les vues pushées, mais ce ne serait absolument pas DRY.

Merci d'avance et bonne journée.

EDIT :
Une solution que j'ai trouvée et qui marche est de créer un UIViewController parent qui implémente la customization de la NavigationBar. Tout contrôler enfant de ce parent aura la même customization. Est-ce une bonne solution selon vous ? Sachant que dans la documentation officielle de UINavigationItem, on peut lire :

Avoid tying the creation of bar button items in your navigation item to the creation of your view controller’s view