2012-01-04 17 views
8

Tengo un UITableView donde quiero forzar una actualización de solo una fila de encabezado de sección específica, no las filas de datos. Por ejemplo, actualice el encabezado de la sección 3. Sé cómo volver a cargar una sección completa (encabezado más datos), pero ¿solo se puede actualizar el encabezado de la sección?¿Hay alguna manera de forzar una actualización de solo un encabezado en UITableView?

EDITAR: Cuando los datos cambian en una sección de la tabla, quiero actualizar la información en el encabezado de una sección DIFERENTE. Por lo tanto, necesito obtener una referencia al encabezado de la sección y luego actualizarlo.

+0

u puede comprobar este tipo problemas http://stackoverflow.com/questions/31692692/what-could- we-do-in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part? noredirect = 1 # comment51326939_31692692 –

Respuesta

11

Si la cabecera es una costumbre UIView, a continuación, puedes llamar setNeedsDisplay en el UIView en lugar de en el UITableView.

+0

¿Cómo se obtiene una referencia al encabezado de sección UIView personalizado para llamar a setNeedsDisplay? Sé cómo obtener una referencia a una fila específica, pero no el encabezado. – ChrisP

+0

Creo que puede hacer esto incluso si el encabezado no es un 'UIView' personalizado, ya que no todos los encabezados instancias de 'UIView's –

+2

1: mantienen las vistas del encabezado que creó en un arreglo O 2: iterate a través de las subvistas UITableView hasta que encuentre el encabezado con su view.tag deseado – NSIntegerMax

1

UITableView * no tiene ningún método de este tipo para volver a cargar solo la vista/título del encabezado ... Debe volver a cargar toda la sección o la tabla.

+0

puede ver este problema dude http://stackoverflow.com/questions/31692692/what-could-we-do -in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part? noredirect = 1 # comment51326939_31692692 –

-3

No me gusta. Me he encontrado con esto mientras que la supresión de filas con los encabezados de sección personalizada y (al menos en IOS 6) sólo tiene que llamar:

[self tableView:self.tableView viewForHeaderInSection:[indexPath section]]; 

Y todo el tiempo que tiene código apropiado para devolver una vista en ese método, puede restaurar fácilmente el encabezado de una sección específica:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

    if ([self tableView:tableView numberOfRowsInSection:section] == 0) { 

     return nil; //hide the header if there are no rows... 

    } else { 
     // configure or refresh the header... 
    } 
} 
+0

¿Sabes si algo como esto es posible en UICollectionViews? – NullHypothesis

+0

Esta es la respuesta correcta y debe ser aceptada como tal. – DJSK

+0

puedes ver este problema amigo http://stackoverflow.com/questions/31692692/what-could-we-do-in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part?noredirect=1 # comment51326939_31692692 –

4

Bueno, en mi caso, después de una cierta tarea asincrónica tengo que actualizar mi vista en sección de cabecera personalizada.

y lo reciba para actualizar su altura usando: Este Código Swift 3+

//to reload your cell data 
self.tableView.reloadData() 
DispatchQueue.main.async { 
// this is needed to update a specific tableview's headerview layout on main queue otherwise it's won't update perfectly cause reloaddata() is called 
    self.tableView.beginUpdates() 
    self.tableView.endUpdates() 
}   
+0

No tengo idea de por qué reloadData() no actualiza los encabezados de las secciones, y podría ser un error, pero 'beginUpdates() endUpdates()' también funcionó para mí. –

+0

ya sabes, eso es iOS: v –

+0

Esto me ayudó, estaba teniendo problemas con la última sección del pie de página desapareciendo después de reloadData – Dan

Cuestiones relacionadas