web-dev-qa-db-fra.com

Swift - Comment créer un en-tête personnalisé pour UITableView?

J'ai besoin d'ajouter un en-tête personnalisé à ma table

J'essaye ça

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let view = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 18))
    let label = UILabel(frame: CGRect(x: 20, y: 20, width: 50, height: 50))
    label.text = "TEST TEXT"
    label.textColor = UIColor.whiteColor()

    self.view.addSubview(view)

    return view
}

mais ça ne marche pas, je ne vois rien sur la table

Qu'est-ce que je fais mal ? Ou peut-être y a-t-il d'autres moyens?

27
Alexey K

Avez-vous défini la hauteur de l'en-tête de section dans le viewDidLoad?

self.tableView.sectionHeaderHeight = 70

De plus, vous devriez remplacer

self.view.addSubview(view)

par

view.addSubview(label)

Enfin, vous devez vérifier vos cadres

let view = UIView(frame: CGRect.zeroRect)

et éventuellement la couleur de texte souhaitée, car il semble être blanc sur blanc.

22
Tanguy G.

La meilleure solution consiste à ajouter une vue d'en-tête personnalisée dans UITableView pour une section Swift 4 est -

1 première Utilisez la méthode ViewForHeaderInSection comme ci-dessous -

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: tableView.frame.width, height: 50))

        let label = UILabel()
        label.frame = CGRect.init(x: 5, y: 5, width: headerView.frame.width-10, height: headerView.frame.height-10)
        label.text = "Notification Times"
        label.font = UIFont().futuraPTMediumFont(16) // my custom font
        label.textColor = UIColor.charcolBlackColour() // my custom colour

        headerView.addSubview(label)

        return headerView
    }

2 N'oubliez pas non plus de définir la hauteur de l'en-tête à l'aide de la méthode heightForHeaderInSection UITableView -

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 50
    }

et vous êtes tous ensemble ???? ???? ???? Check it here in image

22
Mohit G.

Si vous souhaitez utiliser un en-tête de table personnalisé comme en-tête de table, procédez comme suit ....

Mis à jour pour Swift 3.0

étape 1

Créez UITableViewHeaderFooterView pour un en-tête personnalisé.

import UIKit

class MapTableHeaderView: UITableViewHeaderFooterView {

    @IBOutlet weak var testView: UIView!

}

Étape 2

Ajouter un en-tête personnalisé à UITableView

    override func viewDidLoad() {
            super.viewDidLoad()

            tableView.delegate = self
            tableView.dataSource = self

            //register the header view

            let nibName = UINib(nibName: "CustomHeaderView", bundle: nil)
            self.tableView.register(nibName, forHeaderFooterViewReuseIdentifier: "CustomHeaderView")


    }

    extension BranchViewController : UITableViewDelegate{

    }

    extension BranchViewController : UITableViewDataSource{

        func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 200
        }

        func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            let headerView = self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "CustomHeaderView" ) as! MapTableHeaderView

            return headerView
        }

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: 

    Int) -> Int {
            // retuen no of rows in sections
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
            // retuen your custom cells    
        }

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        }

        func numberOfSections(in tableView: UITableView) -> Int {
            // retuen no of sections
        }

        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            // retuen height of row
        }


    }
15
GayashanK

Si vous utilisez une cellule personnalisée comme en-tête, ajoutez ce qui suit.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let headerView = UIView()
        let headerCell = tableView.dequeueReusableCell(withIdentifier: "customTableCell") as! CustomTableCell
        headerView.addSubview(headerCell)
        return headerView
    }

Si vous voulez avoir une vue simple, ajoutez ce qui suit.

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView:UIView =  UIView()
    return headerView
}
12
A.G

Cela a fonctionné pour moi - Swift

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let headerCell = tableView.dequeueReusableCell(withIdentifier: "customTableCell") as! CustomTableCell
        return headerCell
    }
9
Basir Alam

add label à subview de la personnalisation view, pas besoin de self.view.addSubview(view), parce que viewForHeaderInSection renvoie le UIView

view.addSubview(label)
7
Anbu.Karthik