2017-07-25 2 views
1

Ich stoße auf ein seltsames Problem, wenn ich einen customHeader für meine tableView erstelle. die Fehler, die ich empfangen habe ist folgendes:Nib muss genau ein Top-Level-Objekt enthalten, das eine UITableViewHeaderFooterView-Instanz sein muss

nib Top-Level-Objekt enthalten muss genau eine, die eine UITableViewHeaderFooterView Instanz sein muss

ich durch meinen Code und xib Datei sowie Beispiele lief, aber ich konnte nicht alles falsch finden irgendwelche Ideen, die ich vermisse?

Der Header Xib mit einer normalen Ansicht erstellt wurde, und dann mit einem Etikett einer Unteransicht wurde die Klasse erstellt mit der folgenden:

CustomTableHeader Klasse:

class CustomTableHeader: UITableViewHeaderFooterView { 
    static var CustomTableHeaderIdentifier = "CustomTableHeader" 
    @IBOutlet weak var titleLabel: UILabel! 

    override awakeFromNib(){ 
     super.awakeFromNib() 
     self.titleLabel.text = "Header" 
    } 

    override func prepareForReuse() { 
     super.prepareForReuse() 
    } 
} 

Viewcontroller Klasse:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet weak var tableView: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.tableView.register(UINib.init(nibName: CustomTableHeader.CustomTableHeaderIdentifier, bundle: nil), forHeaderFooterViewReuseIdentifier: CustomTableHeader.CustomTableHeaderIdentifier) 
    } 


    //Other Methods 
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     if let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: CustomTableHeader.CustomTableHeaderIdentifier) as? CustomTableHeader { 
      header.titleLabel.text = "Section 1" 
      return header 
    } 
} 

Antwort

9

Ich habe mein Problem herausgefunden! Für den Fall, dass jemals jemand darauf reinkommt, stellen Sie sicher, dass Ihre erste Ansicht wirklich das einzige Objekt in der XIB-Datei ist. Zum Beispiel habe ich versucht, der Header-Ansicht eine Geste hinzuzufügen, und dies wird auch als Objekt betrachtet. Wenn Sie eine Geste hinzufügen möchten, können Sie dies programmgesteuert tun:

addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(/* FUNCTION */))) 
+2

Hatte genau dasselbe Problem, danke! – derf26

Verwandte Themen