2012-09-06 7 views
6

Qualcuno ha provato a utilizzare un UISearchDisplayController con un UISearchBar che è un UIBarButtonItem in una UIToolbar?iOS - utilizzando UISearchDisplayController con UISearchBar che è UIBarButtonItem in UIToolbar

Gradirei suggerimenti su come farlo con successo.

Attualmente ogni volta che il controller di ricerca si apre esso ridisegna l'UISearchBar e sto lottando per mantenere un aspetto simile a quello UIToolbar

+0

quindi .. si desidera personalizzare UISearchBar? È questa la domanda? –

+0

Immagino di avere due domande: 1. Non dovrei incorporare UISearchBar nella UIToolbar se allego un UISearchDisplayController? 2. Se l'aspetto di UISearchBar in UISearchDisplayController può essere corretto quando si attiva come è fatto? Attualmente è ridisegnato e riposizionato e non mantiene l'aspetto di UISearchBar nella UIToolbar – Rammeln

risposta

5

Di solito non si vuole mettere una barra di ricerca all'interno di una barra degli strumenti, tuttavia, sembra che tu voglia fare qualcosa di simile a quello che ho fatto.

: ecco come ho fatto, può essere chiamato un hack, ma funziona come un fascino :)

Prima di tutto bisogna impostare in costruttore di interfaccia come questa:

enter image description here

Si noti che la ricerca non è un figlio della barra degli strumenti, ma è sopra.

La barra di ricerca deve avere lo sfondo a "colore chiaro" e maschere di autoresizing flessibili a sinistra, a destra e in larghezza.

Si inserisce un'etichetta di 1 pixel con sfondo nero sotto la barra degli strumenti, ad es. [x = 0, y = 44, larghezza = 320 o larghezza del riquadro, altezza = 1], anche maschere di autoresizing flessibili di sinistra, destra e larghezza. Questo serve a nascondere il pixel visibile che si ottiene, dopo che il controller di visualizzazione della ricerca mostra la tabella vista. Provalo senza di esso per capire cosa intendo.

È possibile impostare qualsiasi elemento della barra degli strumenti e assicurarsi di disporre di prese per loro, dal momento che ne avrete bisogno.

e ora per il codice ...

quando si avvia la ricerca:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
    // animate the search bar to the left ie. x=0 
    [UIView animateWithDuration:0.25f animations:^{ 
     CGRect frame = controller.searchBar.frame; 
     frame.origin.x = 0; 
     controller.searchBar.frame = frame; 
    }]; 
    // remove all toolbar items 
    [self.toolbar setItems:nil animated:YES]; 
} 

Quando si termina la ricerca

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    // animate search bar back to its previous position and size 
    // in my case it was x=55, y=1 
    // and reduce its width by the amount moved, again 55px 
    [UIView animateWithDuration:0.25f 
          delay:0.0f 
         // the UIViewAnimationOptionLayoutSubviews is IMPORTANT, 
         // otherwise you get no animation 
         // but some kind of snap-back movement 
         options:UIViewAnimationOptionLayoutSubviews 
        animations:^{ 
         CGRect frame = self.toolbar.frame; 
         frame.origin.y = 1; 
         frame.origin.x = 55; 
         frame.size.width -= 55; 
         controller.searchBar.frame = frame; 
        } 
        completion:^(BOOL finished){ 
         // when finished, insert any tool bar items you had 
         [self.toolbar setItems:[NSArray arrayWithObject:self.currentLocationButton] animated:YES]; 
        }]; 
} 

Con questo ottengo il seguente con una simpatica animazione:)

enter image description here

enter image description here