web-dev-qa-db-fra.com

Comment modifiez-vous la couleur d'un titre de section dans une table?

Voici ce que j'ai pour le moment.

 enter image description here

Comment puis-je me référer à cela pour pouvoir modifier la couleur du texte afin qu'elle corresponde à ma liste d'index? SectionForSectionIndexTitle a bien fonctionné pour l'ajout du titre de section correct, mais comment accéder exactement à l'élément title? 

Ou est-ce impossible et j'ai besoin de redessiner la vue et de l'ajouter avec viewForHeaderInSection?

16
AMAN77

vous pouvez utiliser celle de la méthode UITableViewDelegate

Swift3 et au-dessus

  func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    if let headerView = view as? UITableViewHeaderFooterView {
        headerView.contentView.backgroundColor = .white
        headerView.textLabel?.textColor = .red
    }
}

Objectif c

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if([view isKindOfClass:[UITableViewHeaderFooterView class]]){
        UITableViewHeaderFooterView * headerView = (UITableViewHeaderFooterView *) view;
        headerView.textLabel.textColor  = [UIColor RedColor];  
    }
}

pour référence j'ai pris le modèle de réponse de ici

42
Anbu.Karthik

Une solution de liner (avec chaînage optionnel):

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    (view as? UITableViewHeaderFooterView)?.textLabel?.textColor = UIColor.red
}
4
Federico Zanetello

Titre personnalisé:

override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let title = UILabel()
    title.font = UIFont(name: "SFUIDisplay-Light", size: 13)!
    title.textColor = UIColor.redColor()

    let header = view as! UITableViewHeaderFooterView
    header.textLabel!.font=title.font
    header.textLabel!.textColor=title.textColor
    header.contentView.backgroundColor = UIColor.whiteColor()
}
1
Bista

Vous pouvez créer votre propre vue de titre de section (en-tête/pied de page), et c'est facile.

class BlackTableViewHeaderFooterView : UITableViewHeaderFooterView {

    override init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)

        contentView.backgroundColor = .black

        textLabel?.font = UIFont.preferredFont(forTextStyle: .body)
        textLabel?.numberOfLines = 0
        textLabel?.textColor = .white
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

class TableViewController : UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(BlackTableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: "\(BlackTableViewHeaderFooterView.self)")
        // do other setup
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "\(BlackTableViewHeaderFooterView.self)")
        header.textLabel?.text = "" // set your header title
        return header
    }
}
0
Jonny

Je voudrais utiliser la classe proxy Appearance (). Je les ajoute généralement dans une fonction dans AppDelegate et les appelle didFinishLaunching. 

private func setupApperances() {
    UILabel.appearance(whenContainedInInstancesOf: [UITableViewHeaderFooterView.self]).textColor = .red
}
0
Konrad77