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:
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:)
quindi .. si desidera personalizzare UISearchBar? È questa la domanda? –
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