2016-08-08 3 views
0

ich eine Tableview mit benutzerdefinierten Tabellenabschnitt Header geladen aus meiner tableSectionHeader.xib Datei durch das folgende VerfahrenHolen Sie sich ein Verweis auf Xib Datei

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

    let nib = UINib(nibName: "TableSectionHeader", bundle: nil) 
    discoverTableView.registerNib(nib, forHeaderFooterViewReuseIdentifier: "TableSectionHeader") 

    let cell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableSectionHeader") as? TableSectionHeader { 
    return cell 
} 

Ich möchte einen variablen Tabellenabschnitt Header haben, basierend auf dem Inhalt so I Ich brauche einen Verweis auf meine XIB-Datei (die tableSectionHeader.swift zugewiesen ist, wo meine IBOutlets wie postImage, postDescription deklariert wird).

Zum Beispiel möchte ich so etwas wie dies zu tun ...

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 

    // get a reference to xib, 
    return xibref.postImage.frame.height + xibref.postDescriptionLabel.frame.height 

} 

Danke,

Hinweis. Ich möchte abgeschätzteRowHeight nicht implementieren, da der "Bug" des Lehrlings dazu führt, dass das TableView wie in diesem Post beschrieben springt. Ich habe es auf diese Weise und encoutered dass Glitch ohne es anderen beheben zu können, als die Höhe der Umsetzung manuell UITableView with dynamic cell heights jumping when scrolling up after reloading cell

+0

Sie meinen also, Sie möchten die XIB instanziieren und eine Dimensionierungsinstanz behalten ... – Wain

+0

Ja. Also kann ich nicht die Variablen in meiner XIB-Datei wie Schriftgröße, Bildgröße, LabelTextcolor ... etc bekommen. Ich könnte es tun, indem ich in meine XIB-Datei schaue und sehe, was sie sind, aber das bedeutet, wenn ich die Höhe oder etwas in Xib ändern werde, muss ich den Code ändern, der nicht sehr nett ist – user172902

Antwort

0

Sie sollten die NIB in viewDidLoad und zugleich registrieren können Sie die NIB und speichern Sie die Ansicht Instanz instanziiert in einer Instanzvariablen, xibref. Dann können Sie Ihre viewForHeaderInSection vereinfachen und Ihr bestehender Code in heightForHeaderInSection könnte funktionieren.

Beachten Sie, dass Sie in heightForHeaderInSection möglicherweise ein Bild/Text tatsächlich in die Ansichtsinstanz einfügen und es nach Layout fragen müssen, um die richtige Höhe daraus zu erhalten.

+0

Ich bin mir nicht sicher, wie man das instanziiert Feder. Würde es Ihnen etwas ausmachen, etwas Licht zu teilen? Wenn ich nib = UINib (nibName: "TableSectionHeader", Bündel: nil) wie! TableSectionHeader besagt, dass dieser Cast immer fehlschlägt. Also ich bin mir nicht sicher, was der richtige Weg wäre. (TableSectionHeader enthält alle meine IBOutlets und ist mit der Xib-Datei verbunden). Ich habe viel mehr an Storyboards gearbeitet als an XIB-Dateien. Danke – user172902

+0

Sie müssen 'instanziateWithOwner verwenden: Optionen:' – Wain

+0

Danke! das funktioniert – user172902

Verwandte Themen