5

La mia app utilizza UISearchDisplayController. Quando l'utente ha inserito un termine di ricerca, desidero che rimanga visibile nella barra di ricerca. Funziona se l'utente sceglie uno dei risultati corrispondenti, ma non se l'utente fa clic sul pulsante "Cerca".Mantieni visibile il termine di ricerca quando UISearchDisplayController è inattivo

Questo funziona:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row]; 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [self.searchDisplayController.searchBar setText:selectedMatch]; 

     return; 
    } 
    ... 

Ma se faccio la stessa cosa in -searchBarSearchButtonClicked: testo non rimane nella barra di ricerca. Qualche idea su come posso realizzare questo in questa situazione?

Correlato, se si imposta il testo della barra di ricerca (ma si lascia inattivo lo UISearchDisplayController) si attiva la visualizzazione di searchResultsTableView. Voglio solo mostrare che quando l'utente tocca la barra di ricerca.

Edit: trovato una soluzione per impostare il testo di una barra di ricerca senza mostrare il searchResultsTableView in qualsiasi momento:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text 
[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = @"text to show"; 

Meglio ancora suggerimenti accolti!

risposta

7

In realtà non è possibile utilizzare lo stesso codice all'interno del metodo searchBarSearchButtonClicked perché non è stato selezionato indexPath per selezionare l'elemento corretto nell'array searchMatches.

Se l'utente fa clic sul pulsante di ricerca e si desidera nascondere l'interfaccia di SearchController, è necessario capire quale testo inserire nella ricerca (ad esempio selezionare il risultato di corrispondenza migliore nell'elenco).

Questo esempio lasciare che rimanga visibile e invariato il termine di ricerca quando l'utente fa clic sul pulsante di ricerca:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.searchBar.text = str; 
} 

Spero che questo aiuti, Vincent

+0

Ah, grazie! Stavo facendo '[self.searchController setActive: NO animated: YES]; self.searchController.searchBar.text = searchBar.text; 'ma ovviamente searchBar.text non è più quello che pensavo fosse dovuto al metodo' setActive' che svuotava la barra di ricerca. –

3

Ripristino manualmente la stringa nella barra di ricerca fa scattare alcuni dei metodi UISearchDisplayDelegate nuovamente. Questo è qualcosa che probabilmente non vuoi, in questo caso.

vorrei modificare vdaubry rispondere a un po ', e mi dà:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.delegate = nil; 
    self.searchController.searchBar.text = str; 
    self.searchController.delegate = self //or put your delegate here if it's not self! 
} 
Problemi correlati