2016-01-26 17 views
1

我知道這可能是一個愚蠢的問題,但在設計方面,爲什麼蘋果將這兩種方法放在單獨的協議中?爲什麼tableView:cellForRowAtIndexPath:和tableView:heightForRowAtIndexPath:不屬於同一個協議?

單元格的類和高度如何成爲不同的責任?

+0

因爲一個人負責數據源,一個負責UI也許? – Tj3n

+0

問題是爲什麼數據和UI表示應該在同一個協議上?不要誤會我只是想理解你的邏輯 –

+0

請閱讀@thibaut答案的評論。 – IgnazioC

回答

0

它不是類和高度,它是內容(又名數據源)和高度(UITableView委託的一部分)。

舉個簡單的例子,假設您有UITableviewCell的子類,並在您的自定義類中定義了所有標籤和東西。 你需要做的唯一事情就是插入你的數據源並填充單元格的每一個元素。

HeightForRowAtIndexPath只是較大的UITableView委託的一小部分,它更多地處理單元上的操作(選擇,取消選擇,編輯)而不是UI。

的文檔是很清楚它雖然: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/ https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/

一個是代表,另一種是不。

+0

'tableView:cellForRowAtIndexPath'負責創建(或重新使用)一個單元格。他的責任是創建一個合適的細胞實例。另一方面,代表負責指定單元格的高度。代表如何知道班級的高度? 換句話說:我無法修改數據源(創建一個不同的單元格),而無需更改委託(高度),委託人應該知道確切的類別。 :( – IgnazioC

+0

你是什麼意思的代表應該知道確切的類? 如果你繼承UITableviewCell你必須註冊類(我這樣做viewWillAppear) 我不明白你的問題,你是提供 –

+0

場景:委託和數據源由兩個獨立的類來實現,datasource實現方法'tableView:CellForRowAtIndexPath'返回類'x'的一個實例 現在委託應該實現'tableView:HeightForRowAtIndexPath:'如何在不知道'tableView:CellForRowAtIndexPath'返回的確切類的情況下計算所需的高度? – IgnazioC