Cambiar el título de encabezado / pie de página de UITableView sin volver a cargar toda la vista de tabla

¿Hay alguna forma de volver a cargar el encabezado / pie de página de una vista de tabla sin llamar [tableView reloadData]; ?

De hecho, quiero mostrar el número de celdas en la sección de una vista de tabla en su pie de página de sección. La vista de tabla es editable y elimino o inserto filas usando

 – insertRowsAtIndexPaths:withRowAnimation: – deleteRowsAtIndexPaths:withRowAnimation: 

Parece que estos methods no actualizan el pie de página de la sección. Extrañamente, cuando invoco a estos methods el método de fuente de datos de vista de tabla

 - (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section 

se llama (¡dos veces!) pero no actualiza la vista de tabla con los nuevos valores !!

Alguien tiene alguna idea de cómo solucionar este problema?

Si solo tiene un encabezado o pie de página de text básico, puede acceder a ellos directamente:

 [tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section]; 

De manera similar para el encabezado:

 [tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section]; 

Logré hacerlo de forma indirecta: creé una UILabel y la configuré como encabezado / pie de página de sección.

 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { // update sectionFooterView.text return sectionFooterView; } - (void)viewDidLoad { // create sectionFooterView in Interface Builder, change the frame here // use Font-size:15 , BG-Color: clearColor , text-Color: RGB=(97,105,118) // and Text-alignment:Center to look like table view's original footer sectionFooterView.frame = CGRectMake(0, 10, 320, 12); } 

¿Alguien sabe una manera de hacer esto sin configurar una vista de pie de página personalizada?

Esto debería funcionar:

  UIView.setAnimationsEnabled(false) tableView.beginUpdates() if let containerView = tableView.footerViewForSection(0) { containerView.textLabel!.text = "New footer text!" containerView.sizeToFit() } tableView.endUpdates() UIView.setAnimationsEnabled(true) 

Aquí hay otra manera de hacerlo:

 UITableViewHeaderFooterView *headerView=[self.tableView headerViewForSection:1]; CATransition *animation = [CATransition animation]; animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; animation.type = kCATransitionFade; animation.duration = 0.35; [headerView.textLabel.layer addAnimation:animation forKey:@"kCATransitionFade"]; headerView.textLabel.text=[self tableView:self.tableView titleForHeaderInSection:1]; [headerView.textLabel sizeToFit]; 

Consulte la documentation de UITableView, o más específicamente -reloadSections:withRowAnimation:

Así es como lo haces en Swift 3.0

 tableView.headerView(forSection: indexPath.section)!.textLabel!.text = "Some text"