2013-08-30 2 views
2

Je vois une situation étrange. J'ai mis une barre de recherche dans la barre de navigation et ai lié un UISearchDisplayController avec la barre de recherche. Maintenant, le contrôleur d'affichage de la recherche a tendance à cacher la barre de navigation lorsque l'utilisateur clique sur la barre de recherche (par conséquent, il cache également la barre de recherche). Pour contrer cela, je UISearchDisplayController et sous-classé mis en œuvre le code suivant: -UISearchDisplayController masquant la barre de navigation

- (void)setActive:(BOOL)visible animated:(BOOL)animated 
{ 
    [super setActive: visible animated: animated]; 
    [self.searchContentsController.navigationController setNavigationBarHidden: NO animated: NO]; 
} 

Maintenant, le problème est résolu d'origine. Je suis capable de rechercher et de naviguer vers d'autres contrôleurs. Cependant, disons que je fais une recherche sur le contrôleur de vue A et que je clique ensuite sur un résultat de recherche qui pousse ensuite le contrôleur de vue B sur la pile de navigation. Maintenant, si j'appuie sur le contrôleur de vue B et que je reviens à A, alors ma barre de navigation disparaît. Il semble que le contrôleur d'affichage de recherche est actif et cache ainsi la barre de navigation.

Si je rend le contrôleur d'affichage de recherche inactif, puis que j'appuie sur le contrôleur de vue B, puis que je l'éclate, la barre de navigation apparaît.

Alors, est-il possible que mon contrôleur d'affichage de recherche reste actif et que la barre de navigation ne disparaisse pas lorsque j'apparais le contrôleur B de la pile de navigation?

Je suis ciblage iOS6

(Il est un code très long donc pas sûr de ce que je poster ici).

Répondre

11

okay et juste au cas où, si quelqu'un fait face à ce genre de situation. J'ai mis en place un travail autour de la situation ci-dessus. Le problème était que lorsque le contrôleur de vue B est sorti de la pile de navigation, searchDisplayController était toujours actif dans le contrôleur de vue A. Maintenant, searchDisplayController suppose que la barre de recherche doit toujours être sous la barre de navigation (AFAIK). Par conséquent, il n'a pas affiché la barre de navigation lorsque le contrôleur A a été à nouveau affiché. Pour résoudre ce problème, je l'ai écrit le code suivant dans la fonction viewWillLayoutSubviews du contrôleur de vue A.

-(void)viewWillLayoutSubviews 
{ 
    if(self.searchDisplayController.isActive) 
    { 
     [UIView animateWithDuration:0.001 delay:0.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
      [self.navigationController setNavigationBarHidden:NO animated:NO]; 
     }completion:nil]; 
    } 
    [super viewWillLayoutSubviews]; 
} 

Le ci-dessus fournit une animation de sorte que lorsque les pops utilisateur voir contrôleur B, le contrôleur de vue A montre la barre de recherche activée (si l'utilisateur avait auparavant essayé de chercher quoi que ce soit avant d'aller voir le contrôleur B). Ce n'est pas une transition très en douceur mais cela fonctionne :) ....

Remarque: - N'utilisez pas le code ci-dessus dans les fonctions viewDidLoad ou viewDidAppear car cela pourrait provoquer une animation indésirable.

6
-(void)viewDidLayoutSubviews{ 
    [self.navigationController setNavigationBarHidden:NO animated:NO]; 
} 

ne cachera pas la barre de navigation.

+1

Travaillé comme un charme, devrait être accepté réponse. – Matt

3

Au cas où quelqu'un souffrirait de ce problème .. Voici ma solution.

-(void) viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    // check if searchDisplayController still active.. 
    if ([searchDisplayController isActive]) { 
    [searchDisplayController setActive:NO]; 
    } 
} 
+2

Merci! Votre réponse a fonctionné mieux pour moi parce que j'utilisais une recherche filtrée et les autres solutions enlevaient la recherche avant que j'aie fini de taper. Le vôtre supprime la recherche après que je suis complètement fini. –

Questions connexes