Pregunta

Lo que quiero:

Un UIVIEW con una UISearchbar en la parte superior. Comenzando a editar la barra de búsqueda atenúa la vista actual y muestra los resultados de búsqueda de otro controlador [uableView].

Lo que he probado:

En Interface Builder:

  • Agregue un "Barra de búsqueda y controlador de visualización de búsqueda" al UIView.
  • Agregue un objeto de marcador de posición para mi UITATYVIEWController
  • Agregue un objeto UableView y configúrelo como la vista para UITableViewController
  • Establezca el delegado para el UISearchbar en UITableViewController
  • Establezca todos los puntos de venta en UISearchDisplayController en el UITATYVIEWController

En codigo:

  • Agregue los protocolos UISearchBardelegate, UISearchDisplayDelegate al UITableViewController

Lo que estoy obteniendo:

Tocando para editar el campo de búsqueda bloquea la aplicación. No hay mensajes de error, y solo se llama al método "ViewDidload" en el UITableViewController.

En conclusión:

¿Cómo hago para usar un controlador externo para una UISearchbar que está en una vista UIView?

¿Fue útil?

Solución

Ok, lo he descubierto. Juro que esta es una de las primeras cosas que probé, pero obviamente no lo hice correctamente.

En mi UIViewController (el que tiene el Uisearchbar en él), instituyo un UISearchDisplayController:

// sb = IBOutlet UISearchBar  
sc = [[SearchController alloc] initWithStyle:UITableViewStylePlain];  
sdc = [[UISearchDisplayController alloc] initWithSearchBar:sb contentsController:sc];  
sb.delegate = sc;  
sdc.delegate = sc;  
sdc.searchResultsDelegate = sc;  
sdc.searchResultsDataSource:sc = sc;  `

Donde SearchController es mi subclase de UITableViewController y adapta el UISearchBarDelegate y UISearchDisplayDelegate protocolos.

Ahora que lo pienso, usar uno vinculado desde IB probablemente funcionaría igual de bien (y de la misma manera) ...

Entonces, lo anterior funciona para mí, pero ahora los resultados de TableView no aparecen a menos que lo agregue manualmente a la vista principal: [self.view addSubview:sc.tableView]; Pero eso es forraje para otra pregunta, supongo.

No hay ninguna documentación en la web (en lo que respecta a mi Google-FU) de un UISearchDisplayController no solteado, por lo que espero que esto ayude a otro Noob OBJ-C algún día.

Otros consejos

Por un lado, si su clase de controlador se extiende desde UITableViewController, no puede tener una barra de búsqueda si está utilizando Interface Builder. En su lugar, extienda desde UIViewController y se ajuste a la fuente de datos de la tabla y delegue protocolos por su cuenta.

Pero sí, para que esa respuesta sea buena para usted, tendrá que agregar algún código o algo a su pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top