2013-01-11 1 views
23

Nella mia applicazione sto usando la funzionalità di ricerca utilizzando la barra di ricerca IOS predefinita, Se metto una stringa per la ricerca funziona bene ma dopo la prima ricerca ho bisogno di visualizzare l'intero origine dati (contenuto originale). La mia funzionalità è se la stringa di ricerca è vuota, verrà visualizzata l'intera origine dati. Il mio problema è che se faccio la stringa di ricerca come vuota nella barra di ricerca predefinita, il pulsante di ricerca viene automaticamente a nascondere lo stato. Devo abilitare il pulsante di ricerca anche se la stringa è vuota. Per favore, guidami per risolvere questo problema.Abilita pulsante di ricerca quando la stringa di ricerca è vuota nella barra di ricerca predefinita

enter image description here

Grazie.

+0

Creare la barra di ricerca personalizzato. AFAIK, non è possibile con la barra di ricerca nativa. – Apurv

+0

si raffina la ricerca non appena il tipo di utente o quando l'utente preme il pulsante di ricerca? – CRDave

+0

Il contenuto nella tabella di origine è troppo alto. Se faccio una ricerca del genere, ciò creerà problemi di prestazioni per me. La fonte di dati contiene anche molte immagini. – Ganapathy

risposta

21

Si prega di scrivere codice seguente può essere utile per voi :) Questo codice di visualizzazione Tasto di ricerca se si dispone di una stringa vuota.

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [self.searchBar setShowsCancelButton:YES animated:YES]; 
    self.tblView.allowsSelection = NO; 
    self.tblView.scrollEnabled = NO; 

    UITextField *searchBarTextField = nil; 
    for (UIView *subview in self.searchBar.subviews) 
    { 
     if ([subview isKindOfClass:[UITextField class]]) 
     { 
      searchBarTextField = (UITextField *)subview; 
      break; 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 

Prova ora :) Grazie :)

+1

Ciao! Ho usato questo codice ma quando ho aggiornato iOS 7 il codice ha smesso di funzionare e sto cercando di capire perché. Qualcuno ha avuto lo stesso problema? – MaikaDalila

+0

Non importa, un utente ha già trovato la risposta qui http://stackoverflow.com/questions/18971988/search-a-uisearchbar-with-no-text-in-xcode5-ios7 – MaikaDalila

+0

@MaikaDalila - È buono per gli sviluppatori che vogliono per trovarlo su iOS 7 .. quindi grazie per il valore prezioso :) – iPatel

1

Creare un costume view & su quel view aggiungere un button per rimuovere la tastiera. Aggiungi tale visualizzazione quando il metodo - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBardelegate di UISearchBar. Su quel pulsante, dimettete la tastiera e lo view che avete creato per quello button. Inoltre, se vuoi cercare su quel pulsante, puoi farlo anche tu. Si prega di vedere l'immagine per ulteriori chiarimenti.

enter image description here

2

Utilizzare il seguente codice per abilitare tasto di ritorno senza testo

UITextField *searchField = nil; 
    for (UIView *subview in searchBar.subviews) { 
    if ([subview isKindOfClass:[UITextField class]]) { 
     searchField = (UITextField *)subview; 
     break; 
    } 
    } 

    if (searchField) { 
    searchField.enablesReturnKeyAutomatically = NO; 
    } 
1

La sua quasi stessa come la risposta accettata, ma se si sta lavorando con iOS 7 è necessario in più per ciclo a causa di alcuni cambiamenti nella barra di ricerca

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [self.searchBar setShowsCancelButton:YES animated:YES]; 
    UITextField *searchBarTextField = nil; 
    for (UIView *mainview in self.searchBar.subviews) 
    { 
     for (UIView *subview in mainview.subviews) { 
      if ([subview isKindOfClass:[UITextField class]]) 
      { 
       searchBarTextField = (UITextField *)subview; 
       break; 
      } 

     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 
1

Utilizzare questo funziona per iOS 6 e 7:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)search 
{ 
    UITextField *searchBarTextField = nil; 
    for (UIView *mainview in search.subviews) { 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
      if ([mainview isKindOfClass:[UITextField class]]) { 
       searchBarTextField = (UITextField *)mainview; 
       break; 
      } 
     } 
     for (UIView *subview in mainview.subviews) { 
      if ([subview isKindOfClass:[UITextField class]]) { 
       searchBarTextField = (UITextField *)subview; 
       break; 
      } 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 
1

Se stai cercando una soluzione un po 'più elegante, potresti ricorrere alla ricorsione per trovare il campo di testo all'interno della barra di ricerca, come mostrato di seguito. Questo dovrebbe funzionare per iOS 6, 7 o qualsiasi altro futuro ios escludendo eventuali deprecazioni da parte di Apple.

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
    UITextField* textField = [self findTextFieldInView:searchBar]; 
    if (textField) { 
     textField.enablesReturnKeyAutomatically = NO; 
    } 
} 

-(UITextField*)findTextFieldInView:(UIView*)view { 
    if ([view isKindOfClass:[UITextField class]]) { 
     return (UITextField*)view; 
    } 
    for (UIView* subview in view.subviews) { 
     UITextField* textField = [self findTextFieldInView:subview]; 
     if (textField) { 
      return textField; 
     } 
    } 
    return nil; 
} 
26

In realtà si può semplicemente impostare searchBar.enablesReturnKeyAutomatically = NO; provata su iOS 7+

+3

ho provato e non ha funzionato ... – rsc

+0

Stranamente funziona ... Se semplicemente deseleziona la flag nel builder dell'interfaccia utente, non funziona, ma ha aggiunto questo linea in viewDidLoad: e ha fatto il trucco. Magia. –

0

Ecco una soluzione che utilizza Swift. Incollalo nella tua funzione viewDidLoad e assicurati di avere un IBOutlet della tua searchBar nel codice.(Il mio esempio qui di seguito, la variabile inputSearchBar è l'IBOutlet)

// making the search button available when the search text is empty 
    var searchBarTextField : UITextField! 
    for view1 in inputSearchBar.subviews { 
     for view2 in view1.subviews { 
      if view2.isKindOfClass(UITextField) { 
       searchBarTextField = view2 as UITextField 
       searchBarTextField.enablesReturnKeyAutomatically = false 
       break 
      } 
     } 
    } 
0

semplice versione Swift:

if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField { 
       searchTextField.enablesReturnKeyAutomatically = false 
} 
1

Swift 3/iOS 10

for view1 in searchBar.subviews { 
     for view2 in view1.subviews { 
      if let searchBarTextField = view2 as? UITextField { 
       searchBarTextField.enablesReturnKeyAutomatically = false 
       break 
      } 
     } 
    } 
1

searchBar.enablesReturnKeyAutomatically = NO ;

1

Forse è un bug lato mela ?. Poiché dal file .xib l'impostazione della chiave di ritorno ad attivazione automatica non funziona come previsto.

Basta aggiungere il seguente codice:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { 
    searchBar.enablesReturnKeyAutomatically = NO; 

    return YES; 
}