2011-02-23 21 views

Respuesta

82

Para poner SearchBar en el centro de navigationbar:

self.navigationItem.titleView = self.searchBarTop; 

Para poner SearchBar a la izquierda/derecha de navigationbar:

UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar]; 
self.navigationItem.rightBarButtonItem = searchBarItem; 
+1

Tengo el problema de que en iPad los resultados se muestran en una vista de tabla incrustada en un popover, en lugar de en el marco de la vista de tabla original. ¿Alguna solución para esto? – Norbert

+2

Si lo configuro así, el 'searchDisplayController' ya no aparece. El método 'cellForRowAtIndexPath:' tampoco se llama. Con 'searchDisplayController.displaysSearchBarInNavigationBar' funciona pero no puedo usarlo porque también soporto iOS 6 ... – jdev

+1

Este enfoque oculta el título – Panos

20

A partir de iOS 7, el UISearchDisplayController soporta esto por defecto . Configure el displaysSearchBarInNavigationBar = YES de UISearchDisplayController para que esto funcione fácilmente.

por la documentación:

A partir de iOS 7.0, se puede utilizar un controlador de pantalla de búsqueda con una barra de navegación (una instancia de la clase UINavigationBar) mediante la configuración de las propiedades displaysSearchBarInNavigationBar y navigationItem del controlador de pantalla de búsqueda.

+0

De acuerdo con los documentos de Apple, parece que no podemos establecer searchBar en titleView. ¿Estoy en lo cierto?¿Puede mostrarnos cómo establece el elemento de navegación del searchDisplayController? Gracias – NLemay

+6

¡Intenté esto pero mi barra de búsqueda está en el medio de la pantalla! –

+5

La manera más fácil al usar Storyboards es arrastrar una barra de búsqueda y buscar el controlador de pantalla fuera del área de utilidades en la parte inferior de la escena actual dentro del contorno del documento. Después de eso solo agrega 'self.searchDisplayController.displaysSearchBarInNavigationBar = YES;' en viewdidload. Es posible que desee mostrar un botón de cancelar u ocultar el botón de retroceso durante la edición para que esto se pueda hacer en la implementación del delegado. – Bohrnsen

12

Como se señaló en un comentarista, al usar searchDisplayController.displaysSearchBarInNavigationBar = true se termina ocultando los elementos de botón de la barra izquierda/derecha existentes.

He encontrado dos formas diferentes de agregar un searchBar a un navigationBar usando la nueva propiedad de iOS7 en searchDisplayController.

1) Enfoque basado en plumilla

Si estás utilizando un .xib, se puede establecer un tiempo de ejecución de Atributo definido por el usuario para este valor y por cualquier motivo, el leftBarButtonItem permanece intacta. No lo he probado con un RightBarButtonItem.

enter image description here

2) Código (Asuntos Timing)

Si se desea implementar en el código, el tiempo parece importar. Parece que primero debe agregar el searchBar al navigationBar, luego configure su barButtonItem.

- (void)viewDidLoad 
{ 
    ... 
    self.searchDisplayController.displaysSearchBarInNavigationBar = true; 
    self.navigationItem.leftBarButtonItem = [UIBarButtonItem new]; 
    ... 
} 
+1

Probé (1) en el guión gráfico y se bloquea. esta clase no es un valor clave que cumple con la codificación para las pantallas de clave SearchBarInNavigationBar. ' –

+0

Puede hacerlo en un StoryBoard, pero debe configurarlo en el controlador de pantalla de búsqueda, no en el controlador de visualización; sin embargo, no conserva el ítem del botón derecho en mi prueba, pero pone la barra de búsqueda en la barra de navegación. – Peter

+1

Puede usar el n. ° 2 con la configuración de UIBarButtonItems en un StoryBoard que tenga un punto de referencia. En lugar de [UIBarButtonItem new] arriba hacer: '' 'self.navigationItem.leftBarButtonItem = self.leftButton''' (donde self.leftButton es la salida para el botón izquierdo). – Peter

8

Echa un vistazo al código de muestra de Apple UICatalog. Muestra cómo usar el nuevo UISearchController de tres maneras diferentes: modalmente, en la barra de navegación y debajo de la barra de navegación.

+0

Estas muestras me ayudaron increíblemente. ¡Gracias! –

Cuestiones relacionadas