2016-10-16 36 views
3

將我的代碼庫從Swift 2.2遷移到Swift 3.0後,我注意到我的UITableView頁腳沒有顯示出來。事實證明,我的UITableViewDelegate方法都沒有被調用(例如:func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView?)。在Swift 3.0和Xcode 8遷移後不調用UITableViewDelegate方法

有趣的是,UITableViewDataSource方法正在被調用,表正在填充。我已將父視圖控制器設置爲表格的delegatedataSource

爲了說明這個問題,我創建了一個sample Swift 3.0 project,它儘量匹配我現有的代碼庫。也許在Swift 3/Xcode 8中發生了一些我不知道的事情,或者我可能會錯過一些非常明顯的東西。感謝您的幫助!

回答

5

的高度,我檢查了您的樣本項目後:

你沒做錯了什麼,而是指viewForFooterInSection,它不會叫,直到你實施heightForFooterInSection方法:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 
    return 50 // for example 
} 

類似的情況:

沒有爲heightForHeaderInSection執行==>即使執行了viewForHeaderInSection也沒有調用。

numberOfRowsInSection返回爲零==>即使實施,也不要求cellForRowAt

附加說明:你不必在viewDidLoad()添加tableView.dataSource = selftableView.delegate = self,他們已經在界面生成器設置。

+1

嘿!我很驚訝,它之前沒有明確設置頁腳高度。也許新的默認高度爲零。 – Plague

3

應設置頁腳

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { 
    return 15 
} 
+0

謝謝你的幫助@Rroobb! – Plague

+0

很高興爲您提供幫助。 – Rob

1

在Xcode8或最新的Swift版本中,方法簽名已被更改。此更改可能導致您的代碼不調用委託方法。

通過使用自動完成再次書寫方法來修復它。

老方法 -

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

新方法 -

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

heightForHeaderInSection必須同時使用viewForHeaderInSection使用。

希望這有助於。

相關問題