Comment implémenter (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
sur le style iOS7 comme (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
travaux?
P.S. J'ai juste besoin de changer la couleur du titre de l'en-tête du UITableView
et de sauvegarder son style.
Vous pouvez changer la couleur d'une étiquette à l'intérieur d'un en-tête tableview standard avant le rendu avec willDisplayHeaderView. Fonctionne également pour iOS6/iOS7.
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
if([view isKindOfClass:[UITableViewHeaderFooterView class]]){
UITableViewHeaderFooterView *tableViewHeaderFooterView = (UITableViewHeaderFooterView *) view;
tableViewHeaderFooterView.textLabel.textColor = [UIColor blueColor];
}
}
Pour référence
UITableViewHeaderFooterView : https://developer.Apple.com/documentation/uikit/uitableviewheaderfooterview
Protocole UITableViewDelegate : https://developer.Apple.com/documentation/uikit/uitableviewdelegate/1614905-tableview
Si vous devez modifier la couleur globale de l'en-tête et du pied de page, utilisez appearance
:
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor redColor]];
Au début du cycle de vie de votre contrôleur de vue (par exemple, -viewDidLoad
), inscrivez la classe:
[[self tableView] registerClass:[UITableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"headerFooterReuseIdentifier"];
Ensuite, dans votre méthode: (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
déquez une cellule, stylisez-la comme vous le souhaitez et retournez-la:
UIColor *titleColor = ... // Your color here.
UITableViewHeaderFooterView *headerFoorterView = [[self tableView] dequeueReusableHeaderFooterViewWithIdentifier:@"headerFooterReuseIdentifier"];
[[headerFooterView textLabel] setTextColor:titleColor];
return headerFooterView;
Et c'est ainsi que vous utilisez une implémentation par défaut.
Pas parfait mais solution:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel *label = [[UILabel alloc] init];
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
if (<is_iOS7>) {
label.text = [[NSString stringWithFormat:@" %@", <title>] uppercaseString];
} else {
if (<is_iPad>) {
label.text = [NSString stringWithFormat:@" %@", <title>];
} else {
label.text = [NSString stringWithFormat:@" %@", <title>];
}
}
return label;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 38.f;
}
Et la réponse de @ aumansoftware est également le meilleur moyen d'ajouter du contenu dans l'en-tête standard tel qu'un bouton. Voici un exemple dans Swift:
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if (view.isKindOfClass(UITableViewHeaderFooterView)) {
let headerView = view as UITableViewHeaderFooterView
// Label
headerView.textLabel.textColor = UIColor.blueColor()
// New Button
let addPeopleButton: UIButton = UIButton.buttonWithType(.ContactAdd) as UIButton
addPeopleButton.addTarget(self, action: "showPeoplePicker:", forControlEvents: UIControlEvents.TouchUpInside)
addPeopleButton.setTranslatesAutoresizingMaskIntoConstraints(false)
headerView.addSubview(addPeopleButton)
let right: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: -12)
let vertical: NSLayoutConstraint = NSLayoutConstraint(item: addPeopleButton, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0)
headerView.addConstraints([right, vertical])
}
}
Il fonctionne exactement comme dans iOS 6. Créez une vue (ou simplement une étiquette qui couvre l'intégralité de l'en-tête) et stylisez-la selon vos besoins.