2015-03-19 32 views
15

UITableview var benim UITableview sayfama eklemeye çalışıyorum.iOS Swift viewForHeaderInSection Çağırılmadı

Ancak, viewForHeaderInSection çağrılmıyor, ancak titleForHeaderInSection çağrıldığını veya gösterildiğini görüyorum. Bunun için özel bir hücre üstbilgisi kullanmayı denedim ve ayrıca çalışmaz.

Neyi yanlış yaptığımı bilmiyorum.

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

cevap

16

viewForHeaderInSection yöntem UITableViewDelegate Protokol aittir. Bu nedenle, bu geri bildirimi almak için tablo görünümünüzün delegate'unu görünüm denetleyicinize ayarlamanız gerekir. Muhtemelen diğer yöntemlerin çağrıldığı gibi tablo görünümünü dataSource ayarladınız.

+0

Evet. Haklısın. tableView.delegate = kendi kendine çalışır. Teşekkür ederim. Bunu unutmuşum. – user3110353

+0

Yardımın buna sevindim. Bu cevabı kabul etmeyi unutma. Teşekkür ederiz – croX

+0

Eğer tabloyu storyboard'dan kullanırsanız, o zaman delege yöntemini storyboard'un kendisinden ayarlayabilirsiniz. – iDevAmit

0

Bu sorunu, varsayılan olarak delege olan UITableViewController'da çağrılmayan viewForHeaderInSection ile yaşadım.

'un, displayForHeaderInSection öğesinin çağrılmasını engelliyordu. Bu nedenle, temsilci görevi çalışmıyorsa, diğer bölüm başlık yöntemlerinden birini geçersiz kılmayacağınızı kontrol etmeniz gerekebilir.

+6

Sadece hata ayıklamaya çalışan herkes için: benim için tam tersiydi. "viewForHeaderInSection", "heightForHeaderInSection" olmadan çağrılmıyordu. – djv

20

hızlı

Sen

Swift 3.0
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

"heightForHeaderInSection" yöntemini kaçırıyordum. Yalnızca görünüm uygularsanız, aranmaz. Altbilgiler için de aynı şey. – OlivaresF

1

da almak için viewDid içine tableView.estimatedSectionHeaderHeight = 40 ekleyebilirsiniz çağırmalıdır viewForHeaderInSection

denilen