2011-11-30 9 views
6

Uso el guion gráfico. Tengo una UITableView con una celda de prototipo. Esta celda es de estilo "subtítulo". He agregado un segue de la celda a la vista detallada. Entonces, cuando el usuario toque una celda, se abrirá el editor correspondiente ... Todo funciona bien.El resultado de la búsqueda de UISearchDisplayController tiene otro diseño y comportamiento de celda que la tabla buscada

Ahora he agregado un UISearchDisplayController a un UISearchBar, implementado los delegados. Eso funciona muy bien

Pero en la tabla de resultados de búsqueda, las celdas son de estilo "predeterminado" y no se pueden tapar. ¿Qué debo hacer para que la tabla de resultados se vea y se comporte como la tabla "no buscada"?

+1

La razón de esto es que UISearchDisplayController crea su propio UITableView, por lo tanto, lo está creando con celdas predeterminadas. –

Respuesta

8

encontrado el problema ...

El método

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

sacó la célula de la tableView, que es en el caso resultado no la tableView de un guión pero el resultTableView de la SearchDisplayController .

Ahora obtengo la celda para mostrar en ambos casos desde la vista de tabla en el guión gráfico y ahora funciona.

+0

Hola Shingoo: ¿te importaría explicar o mostrar tu código? que solucionó este problema? – dnstevenson

+1

Mi vista no es una tabla de vista simple. Necesitaba una imagen de fondo, por lo que la tabla está incrustada en una uiview. el controlador de vista tiene una salida a la vista de tabla. Cuando se llama a cellForRowAtIndexPath, ahora obtengo la celda de la salida tableView, por lo que la celda siempre se deriva de la tabla personalizada en el constructor de la interfaz. – Shingoo

0

Hay una posible respuesta a este here. Es posible que no funcione del todo para usted, pero como expliqué, el UISearchDisplayController crea la vista de tabla.

Compruebe la documentación y se puede obtener una mejor comprensión de la misma, pero afirma:

inicializar un controlador de pantalla de búsqueda con una barra de búsqueda y un controlador vista responsable de gestionar el contenido original de estar buscado. Cuando el usuario inicia una búsqueda, el controlador de visualización de búsqueda es responsable de superponer la interfaz de búsqueda sobre la vista del controlador de vista original y mostrar los resultados de la búsqueda. Los resultados se muestran en una vista de tabla creada por el controlador de pantalla de búsqueda . Además del controlador de vista original, son lógicamente otras cuatro funciones. Suelen jugarse todos en el mismo objeto , a menudo el controlador de vista original.

+0

Gracias por su respuesta. Depuré mi código y sí, se invocaron los métodos del origen de datos. La celda correcta también se extrae del guión gráfico y se completa con los datos correctos, pero la tabla de resultados muestra el estilo predeterminado de celda de la tabla ... No puedo entender por qué ... – Shingoo

24

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 célula a partir del parámetro tableView

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

asignarlo directamente desde el TableView en la vista de lo que tiene que reemplazar este

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

con este

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

El código que proporcionó no hace nada. –

+0

Esto me ayudó. Dado que todas las células prototipo están en TableView "Normal/Original", no en TableView "Buscar", es un buen consejo usarlo. en lugar del parámetro pasado tableview! –

0

En mi caso UISearchDisplayController estaba utilizando el tipo correcto de células (personalizado) pero la altura de la celda fue mal, así que tuvo que usar

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

método para solucionarlo.

3

He estado usando ios 7.0 y Xcode 5.0. Encontré que el controlador de visualización de búsqueda está usando el mismo diseño de vista de tabla que el controlador de vista de delegado. Todo lo que tiene que hacer es juzgar si la vista de tabla actual es la vista de tabla del controlador de vista delegado, o la vista de tabla del controlador de visualización de búsqueda. Pero recuerde 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 se olvida de poner en práctica esa frase, entonces la fila de la vista de tabla de la pantalla de búsqueda es tan alta como fila predeterminada, lo que le hace pensar que no se parece a la tabla "no buscada".

+0

Esto realmente me salvó gracias! –

Cuestiones relacionadas