7

Je crée une option UISearchBar dans la barre de navigation de mon application. Mon application comprend plusieurs vues et sous-vues. J'ai cette vue principale qui a 3 autres points de vue sur lui-même. l'un d'eux est vide (pour l'instant), les 2 autres ont des vues de table sur eux.résilier le clavier lorsque vous perdez votre focus sur uisearchbar

Je veux que mon clavier s'affiche lorsque je suis en train de chercher et que je me cache lorsque je fais la recherche proprement dite ou lorsque je touche/clique en dehors de la barre de recherche. Im en utilisant searchbardelegate comme requis.

Je suis capable de masquer le clavier en utilisant [searchBar resignFirstResponder] comme suit.

  • Lorsque vous appuyez sur la touche de retour.
  • Lorsque j'annule la recherche manuellement
  • Lorsque j'appuie sur l'une des touches du clavier pour rechercher ou annuler.
  • Quand je touche une partie vide de l'écran à l'aide

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    {  
        UITouch *touch = [[event allTouches] anyObject]; 
        if ([mySearchBar isFirstResponder] && [touch view] != mySearchBar) { 
         [mySearchBar resignFirstResponder]; 
        } 
        [super touchesBegan:touches withEvent:event]; 
    } 
    

Ce que je semble pas être en mesure de faire est de rendre répondre à toucher un de mes 2 tableviews. Ou lorsque je remplis la vue principale pour contenir quelque chose de complètement différent. J'ai essayé de changer la méthode touchesbegan pour démissionner de la barre de recherche en touchant les vues de table mais cela n'a pas fonctionné jusqu'à présent.

J'ai essayé plusieurs autres choses trouvées par mon cher ami mr. google, mais tout semble être quelque chose d'autre que j'ai besoin.

Quelqu'un at-il une idée de ce que je pourrais faire pour résoudre ce problème? Il semble que, lors de l'utilisation de points d'arrêt, la méthode touchesbegan réponde à la vue de fond, mais ne répond pas lorsque je touche les vues de table ou la barre de navigation (contenant la barre de recherche).

Répondre

13

Résolu!

- (BOOL) searchBarShouldBeginEditing:(UISearchBar *)searchBar 
{ 
    [self.myViewController1.customView1 setUserInteractionEnabled:NO]; 
    [self.myViewController2.customView2 setUserInteractionEnabled:NO]; 
    [searchBar setShowsCancelButton:YES animated:[mySettings animation]]; 
    return YES; 
} 

j'ai commencé en arrêtant le userInteraction sur mes 2 subviews, au moment où je commencer à utiliser la barre de recherche.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{  
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([self.mySearchBar isFirstResponder] && [touch view] != self.mySearchBar) 
    { 
     [self.mySearchBar resignFirstResponder]; 
     [self.myViewController1.customView1 setUserInteractionEnabled:YES]; 
     [self.myViewController2.customView2 setUserInteractionEnabled:YES]; 
    } 
    [super touchesBegan:touches withEvent:event]; 
} 

Puis, quand je clique/robinet/contact en dehors du SearchBar je suis résigne le clavier qui est le premier intervenant encore et après que je mis userInteraction dos pour les 2 sous-vues. L'ordre de le faire est vital! Ce code vous permet de démissionner du clavier dans un seul contrôleur principal, même s'il est encombré d'un chargement de sous-vues.

0

Avez-vous essayé,

UISearchBar *searchBar; 

Suivant définir la propriété getter et setter de UISearchBar.

et appeler la méthode quelconque

[searchBar resignFirstResponder]; 
Questions connexes