2016-05-10 21 views
0

Zum Beispiel hier ist meine benutzerdefinierte Zelle:Verwenden der contentView-Eigenschaft für eine benutzerdefinierte tableView-Zelle (die als Header übergeben wird), um zu verhindern, dass die benutzerdefinierten Attribute aufgehoben werden?

protocol SectionHeaderTableViewCellDelegate { 
    func didSelectUserHeaderTableViewCell(sectionHeader: SectionHeaderTableViewCell, selected: Bool, type: Type) 
} 

class SectionHeaderTableViewCell: UITableViewCell { 
    @IBOutlet weak var labelContainerView: LabelContainerView! 
    @IBOutlet weak var sectionTitleLabel: UILabel! 
    @IBOutlet weak var plusButton: UIButton! 

    var type: Type? 

    var delegate: SectionHeaderTableViewCellDelegate? 
    var dog: Dog? 

    let sections = [Type.Meals, Type.Exercise, Type.Health, Type.Training, Type.Misc] 
} 

extension SectionHeaderTableViewCell { 
    @IBAction func plusButtonPressed(sender: AnyObject) { 
     if let type = type { 
      delegate?.didSelectUserHeaderTableViewCell(self, selected: plusButton.selected, type: type) 
     } 
    } 

In meinem Controller, wenn ich eine Rückkehr von header.contenView ich die gewünschten Ergebnisse des Headers bleiben an Ort und Stelle hinzufügen, aber leider ist es auf die Schaltfläche in der benutzerdefinierten zunichte macht Header verhindert, dass es aufgerufen wird. Ansonsten, wenn ich einfach nur Kopfzeile zurückgeben die Schaltfläche auf der benutzerdefinierten Header-Zelle funktioniert wie erwartet, aber die Kopfzeile bewegt sich mit der Zeile wird gelöscht, die offensichtlich unansehnlich ist und nicht was ich will.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    guard let header = tableView.dequeueReusableCellWithIdentifier("sectionHeader") as? SectionHeaderTableViewCell else { return UITableViewCell() } 

    header.delegate = self 
    header.updateDogWithGender(dog) 

    header.type = header.sections[section] 

    header.sectionTitleLabel.text = header.sections[section].rawValue 

    return header.contentView 
} 

moving headers

Antwort

0

Falls läuft jemand in einer ähnlichen Situation die Lösung eine Nib-Datei zu erstellen war und passen Sie es, wie Sie sehen, passen. Erstellen Sie eine Nib-Datei, indem Sie zu Datei -> Neue Datei -> iOS -> Benutzeroberfläche -> und wählen Sie Ansicht. Create Nib file. Ich habe meine Ansichten und Schaltflächen hinzugefügt, um das gewünschte Aussehen zu erhalten. customize Nib. Von dort änderte ich die benutzerdefinierte Zellenklasse stattdessen zu UITableViewHeaderFooterView und verband meine Ausgänge und Aktionen mit der neuen Nib-Datei.

class SectionHeaderView: UITableViewHeaderFooterView {... previous code from above } 

Zurück in der Steuerung die viewForHeaderInSection Funktion aktualisieren, anstatt eine Feder zu laden:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let header = NSBundle.mainBundle().loadNibNamed("SectionHeader", owner: self, options: nil).first as? SectionHeaderView 

    header?.delegate = self 
    header?.updateDogWithGender(dog) 

    header?.type = header?.sections[section] 

    header?.sectionTitleLabel.text = header?.sections[section].rawValue 

    return header 
} 

Durch die Art, wie wir das Eigentum am Ende der loadNibNamed Eigenschaft zuerst erklärt, weil es eine Reihe von AnyObjects zurück und da meine Nib-Datei nur eine UIView enthält, die eine Beschriftung und eine Schaltfläche enthält, brauchte ich nur das erste und einzige Element im Array. Danke an meinen Mentor James, dass du das herausgefunden hast!