2017-10-23 4 views
0

Ich habe das ganze WWW nach einer anständigen Lösung gesucht, aber die meisten scheinen veraltet oder unzureichend.Header-Abschnitte in Tabellenansicht wiederverwenden

Ich habe Schwierigkeiten, eine benutzerdefinierte UITableViewHeaderFooterView in meinem UITableViewController einfach wieder zu verwenden.

Das ist mein Ansatz:

  1. eine Feder erstellen.
  2. Erstellen eines benutzerdefinierten UITableViewHeaderFooterView namens HeaderView
  3. ein Label hinzufügen und anschließen in UITableViewController ‚s viewDidLoad()
  4. Dequeue und zurück um die Spitze in tableView(_ tableView: UITableView, viewForHeaderInSection section: Int)

Gewohnheit die Spitze zu HeaderView

  • Registrieren HeaderView Klasse:

    class HeaderView: UITableViewHeaderFooterView { 
        @IBOutlet weak var customLabel: UILabel! 
    } 
    

    In UITableViewController Klasse:

    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        tableView.register(UINib(nibName: "HeaderView", bundle: nil), forHeaderFooterViewReuseIdentifier: "Header") 
    
    } 
    
    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
        let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header") as! HeaderView 
        headerView.customLabel.text = "This is a header section" 
        return headerView 
    } 
    

    Dies scheint von vielen als der Ansatz beraten werden, aber ich glaube, ich bin nicht richtig um die Spitze des Besitzers benutzerdefinierte Klasse HeaderView (UITableViewHeaderFooterView) eingestellt. Wenn die Zelle aus der Warteschlange entfernt wird bekomme ich einen tödlichen Absturz:

    *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x60000020ebe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key customLabel.'

    ich auf jeden Fall sicher bin, habe ich die UILabel richtig angeschlossen, um Datei Besitzer in nib IB.

    Assigning class

    Ich versuchte, die HeaderView Klasse UIView ändern, aber dann würde dequeueReusableHeaderFooterView(withIdentifier: "Header") as! HeaderView zu einem Absturz führen, wenn UITableViewHeaderFooterView zu UIView zwingen.

    Warum ist das, und was ist der aktuelle Weg, um dies zu lösen?

  • +0

    aber ich bin nicht in der Lage die Spitze des Besitzers benutzerdefinierte Klasse HeaderView (UITableViewHeaderFooterView) einzustellen. ? –

    +0

    Aktualisierte Antwort mit Screenshot! – nomadoda

    +0

    In Ihrem Screenshot sollte die Vererbung vom Ziel überprüft werden Pl Check Ihr HeaderView.swift wird zum Ziel hinzugefügt -> tippen Sie auf swift Datei -> Rechtes Kontrollfeld ist ausgewählt oder nicht –

    Antwort

    1

    Ich fand das Problem war, dass ich die Feder - Datei Besitzer auf HeaderView gesetzt und meine customLabel damit verbunden.

    Die Lösung bestand darin, die Ansichtsklasse der Schreibfeder auf HeaderView zu setzen und stattdessen das Etikett mit diesem zu verbinden. Es war auch seltsamerweise notwendig, es in eine UIView zu bringen.

    as such