El resultado de la búsqueda de UISearchDisplayController tiene otro diseño y comportamiento de celda que la tabla buscada

StackOverflow https://stackoverflow.com/questions/8333532

Pregunta

Estoy usando storyboard. Tengo una vista de uable con una celda prototipo. Esta celda es de estilo "subtítulo". He agregado un segue de la celda a la vista detallada. Entonces, cuando el usuario golpee una celda, abrirá el editor correspondiente ... todo funciona muy bien.

Ahora agregué un UISearchDisplayController un UISearchbar, implementé los delegados. Eso funciona muy bien.

Pero en la tabla de resultados de búsqueda, las celdas son de estilo "predeterminadas" y no son tapables. ¿Qué tengo que hacer para que una tabla de resultados se vea y se comporte como la tabla "no investigada"?

¿Fue útil?

Solución 2

Encontré el problema ...

El método

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

extraí la celda de la vista de tabla, que está en el caso de resultados, no en el tableView del guión gráfico, sino el resultado de la vista de resultados del resultado de SearchDisplayController.

Ahora hago que la celda se muestre en ambos casos desde la vista de la tabla en el guión gráfico y ahora funciona.

Otros consejos

Me gustaría contribuir a la respuesta #1, esto es lo que hice y funcionó para mí

en el método

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

En lugar de asignar la celda desde el parámetro tableView

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Asignarlo directamente desde la vista de tabla en la vista para que tenga que reemplazar esto

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

con este

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

He estado usando iOS 7.0 y Xcode 5.0. Descubrí que el controlador de visualización de búsqueda está utilizando el mismo diseño de TableView que el controlador de vista delegado. Todo lo que tiene que hacer es juzgar si el TableView actual es el TableView de TableView del controlador delegado o el TableView del controlador de visualización de búsqueda. Pero recuerda agregar la oración

tableView.rowHeight = self.tableView.rowHeight;

En el siguiente fragmento de código:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

Si olvida implementar esa oración, entonces la fila de la vista de la tabla de la pantalla de búsqueda es tan alta como una fila predeterminada, lo que te hace pensar que no se parece a la tabla "no investigada".

Hay una posible respuesta a esto aquí. Puede que no funcione completamente para usted, pero como expliqué, el UISearchDisplayController crea la vista de tabla.

Consulte la documentación y puede comprender mejor, pero dice:

Inicializa un controlador de visualización de búsqueda con una barra de búsqueda y un controlador de vista responsable de administrar el contenido original a buscar. Cuando el usuario inicia una búsqueda, el controlador de visualización de búsqueda es responsable de superponer la interfaz de búsqueda a través de la vista del controlador de vista original y mostrar los resultados de búsqueda. Los resultados se muestran en una vista de tabla creada por el controlador de visualización de búsqueda. Además del controlador de vista original, hay lógicamente otros cuatro roles. Por lo general, todos son jugados por el mismo objeto, a menudo el controlador de vista original en sí.

En mi caso, UISearchDisplayController estaba usando el tipo de celda derecho (personalizado) pero la altura de la celda era incorrecta, así que tuve que usar

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

Método para solucionarlo.

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