Est-il possible de recharger l'en-tête/le pied de section d'une vue tabulaire sans appeler [tableView reloadData];
?
En fait, je souhaite afficher le nombre de cellules d'une section de vue tableau dans son pied de section. La vue tabulaire est modifiable et j'efface ou insère des lignes à l'aide de
– insertRowsAtIndexPaths:withRowAnimation:
– deleteRowsAtIndexPaths:withRowAnimation:
Il semble que ces méthodes ne mettent pas à jour le pied de section. Étrangement, quand j'appelle ces méthodes la méthode source de données vue tableau
- (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section
est appelé (deux fois!) mais il ne met pas à jour la vue tableau avec les nouvelles valeurs !!
Quelqu'un a une idée de comment résoudre ce problème?
J'ai réussi à le faire de manière indirecte: j'ai créé un UILabel et je l'ai défini comme en-tête/pied de section.
- (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);
}
Est-ce que quelqu'un connaît un moyen de faire cela sans définir une vue de pied de page personnalisée?
Si vous avez juste un en-tête ou un pied de texte basique, vous pouvez y accéder directement:
[tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section];
de même pour l'en-tête:
[tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section];
Cela devrait fonctionner:
UIView.setAnimationsEnabled(false)
tableView.beginUpdates()
if let containerView = tableView.footerViewForSection(0) {
containerView.textLabel!.text = "New footer text!"
containerView.sizeToFit()
}
tableView.endUpdates()
UIView.setAnimationsEnabled(true)
Voici comment vous le faites dans Swift 3.0
tableView.beginUpdates()
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
tableView.endUpdates()
Voici une autre façon de le faire:
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];
Consultez la documentation de UITableView, ou plus précisément -reloadSections:withRowAnimation:
Vous pouvez aussi le faire de cette façon
override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
switch section {
case 0:
return "Some string"
default:
return ""
}
}
J'ai constaté que le texte de pied de page ne se mettait pas à jour correctement s'il ne remplissait plus une ligne et remplissait plusieurs lignes. Réinitialiser la largeur et la hauteur de l'étiquette résoudrait ce problème.
UIView.setAnimationsEnabled(false)
textLabel.frame = CGRect(x: textLabel.frame.minX,
y: textLabel.frame.minY,
width: 0,
height: 0)
tableView.beginUpdates()
textLabel.text = "Your text"
textLabel.sizeToFit()
tableView.endUpdates()
UIView.setAnimationsEnabled(true)