2015-03-19 11 views
15

Ich habe eine UITableview Ich versuche, eine HeaderView auf meine UITableview hinzuzufügen.iOS Swift viewForHeaderInSection Wird nicht aufgerufen

Die viewForHeaderInSection wird jedoch nicht aufgerufen, aber ich sehe die titleForHeaderInSection aufgerufen wird oder angezeigt wird. Ich habe auch versucht, eine benutzerdefinierte Zelle Header dafür zu verwenden, und es funktioniert auch nicht.

Ich habe keine Ahnung, was ich falsch mache.

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.title = "Groceries" 

    tableView.registerNib(UINib(nibName: "TransactionSpecifiedCategoriesTableViewCell", bundle: nil), forCellReuseIdentifier: "TransactionSpecifiedCategoriesTableViewCell") 
    tableView.registerNib(UINib(nibName: "TransactionSpecifiedCategoriesHeaderViewCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "TransactionSpecifiedCategoriesHeaderViewCell") 
    tableView.tableFooterView = UIView(frame: CGRectMake(0, 0, 0, 0)) 
} 

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

    let footerView = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 100)) 

    footerView.backgroundColor = UIColor.blackColor() 

    return footerView 

     //let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView 
    //var headerView = UIView(frame: CGRectMake(0, 0, 100, 320)) 
    //headerView.backgroundColor = UIColor.blackColor() 
    //   
    //return headerView 
} 

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

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return "First section header title" 
} 

enter image description here

Antwort

16

Die viewForHeaderInSection Methode gehört zur UITableViewDelegate Protokoll. Sie müssen daher die delegate Ihrer Tabellenansicht auf Ihren View-Controller setzen, um diesen Rückruf zu erhalten. Sie haben wahrscheinlich die dataSource der Tabellenansicht so eingestellt, wie Ihre anderen Methoden heißen.

+0

Ja. Du hast Recht. tableView.delegate = funktioniert selbst. Vielen Dank. habe das vergessen. – user3110353

+0

Froh das hat geholfen. Vergiss nicht, diese Antwort zu akzeptieren. Danke – croX

+0

Wenn Sie das TableView vom Storyboard verwenden, können Sie die Delegate-Methode vom Storyboard selbst aus festlegen. – iDevAmit

0

Ich hatte dieses Problem mit ViewForHeaderInSection nicht in der UITableViewController, die der Delegat standardmäßig aufgerufen wird. Es stellte sich heraus, dass

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

wurde verhindern, dass viewForHeaderInSection aufgerufen werden. Wenn also die Delegat-Funktion nicht funktioniert, müssen Sie möglicherweise überprüfen, ob Sie eine der anderen Methoden der Abschnittsüberschrift außer Kraft setzen.

+6

Nur für jeden, der versucht zu debuggen: für mich war es das Gegenteil. 'viewForHeaderInSection' wurde nicht ohne' heightForHeaderInSection' aufgerufen. – djv

20

In swift 3

sollten Sie

nennen
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     let rect = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 44) 
     let footerView = UIView(frame:rect) 
     footerView.backgroundColor = UIColor.clear 
     return footerView 
    } 
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
     return 44 
    } 
+2

Ich habe die 'heightForHeaderInSection' Methode vermisst. Wenn Sie nur View implementieren, wird es nicht aufgerufen. Das Gleiche gilt für die Fußzeilen. – OlivaresF

1

in Swift 3,0

Sie können auch tableView.estimatedSectionHeaderHeight = 40 in den viewDid hinzufügen zu bekommen viewForHeaderInSection genannt