2011-09-20 15 views
7

Sto facendo un'opzione UISearchBar nella barra di navigazione della mia app. La mia app è composta da più viste e sottoview. Ho questa vista principale che ha altri 3 punti di vista su di sé. uno di questi è vuoto (per ora) gli altri 2 hanno visualizzazioni di tabelle su di essi.dimettersi tastiera quando si perde la messa a fuoco su uisearchbar

Desidero mostrare la tastiera quando cerco e mi nascondo quando eseguo la ricerca effettiva o quando tocchi/clic all'esterno della barra di ricerca. Im usando il searchbardelegate come richiesto.

Im in grado di nascondere la tastiera utilizzando [searchBar resignFirstResponder] nei seguenti modi.

  • Quando si preme il tasto di ritorno.
  • Quando annullo la ricerca manualmente
  • Quando si preme uno dei pulsanti della tastiera per cercare o annullare.
  • quando tocco una parte vuota dello schermo utilizzando

    - (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]; 
    } 
    

Quello che non sembra di essere in grado di fare è rendere rispondere a toccare uno dei miei 2 tableviews. O quando riempio la mainview per contenere qualcosa di completamente diverso.

Ive ha provato a cambiare il metodo touchesbegan per abbandonare la barra di ricerca quando si toccano le visualizzazioni di tabella ma non ha funzionato finora.

Ho provato diverse altre cose trovate dal mio caro amico Sig. google, ma tutto sembra essere un'altra cosa di cui ho bisogno.

Qualcuno ha qualche idea su cosa potrei fare per risolvere questo problema?

MODIFICA: Appare in modo che, quando si utilizzano i punti di interruzione, touchesbegan-metodo risponda a backgroundview ma non risponde quando tocco una delle tabelle o la barra di navigazione (contenente la barra di ricerca uisearch).

risposta

13

Risolto!

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

ho iniziato spegnendo l'UserInteraction sui miei 2 subviews, in questo momento mi metto con il SearchBar.

- (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]; 
} 

Poi, quando clicco/tap/touch di fuori della barra di ricerca in primo luogo ho dimetto la tastiera che è il primo risponditore ancora e dopo che ho messo UserInteraction indietro per le 2 subviews. L'ordine di fare questo è vitale!

Questa parte di codice consente all'utente di abbandonare la tastiera in un singolo controllerViewView anche quando è pieno di un carico massivo di sottoview.

0

Hai provato questo,

UISearchBar *searchBar; 

Successive il getter e setter di proprietà di UISearchBar.

e chiamare il qualsiasi metodo

[searchBar resignFirstResponder]; 
Problemi correlati