例如:UITableviewDelegate
協議有tableView:didSelectRowAtIndexPath:
。爲什麼將它作爲協議中的委託方法而不是UITableView
類中的方法並直接調用它?爲什麼使用協議,不直接調用方法?
1
A
回答
4
它實際上在UITableViewDataSource
不是委託這是一個重要的區別。
代表團的目的是將責任轉移給客戶代碼。 UITableView
本身不知道它需要創建什麼類型的單元格。您的應用程序是知道細胞應該是什麼樣子以及它們的功能的應用程序。這就是tableView
要求數據源(由協議定義)創建單元的原因。
在Apple框架中,delegate
通常用於偵聽對象事件,而dataSource
用於爲某些內容提供內容。這兩種都是委託模式的形式。
如果您問是因爲您想問一個表格視圖 - 「該索引路徑上的單元格是什麼?」你可以使用實例方法cellForRowAtIndexPath
0
因爲你可能需要一個不同的類是數據源的表視圖在UITableViewController
。
下面是一個簡單的,有點做作的例子來說明......
想象一下,你有兩個表視圖的視圖控制器在它顯示DataA的和數據B,你可以下一個按下按鈕的每個表去該表是全屏的另一個視圖。您可以將其設置爲一個視圖控制器,其中有兩個UITableView
和兩個UIButton
,第二個控制器MyFullScreenTableViewController
這是一個UITableViewController
子類,那麼您將擁有兩個完全獨立的對象,一個是DataA表的數據源,一個是DataB表的數據源。因此,這些對象在第一個視圖中爲這兩個表提供了單元格,並且它們還在全屏控制器中提供了單元格 - 您可以根據正在查看的表傳遞正確的數據源。
相關問題
- 1. 爲什麼NSFilePresenter協議方法永遠不會被調用?
- 2. SKPhysicsContactDelegate協議方法不會被調用
- 3. JavaScript爲什麼不讓你直接調用數字方法?
- 4. 何時/爲什麼/如何使用UINavigationControllerDelegate協議實例方法?
- 5. 爲什麼我們使用接口而不是協議?
- 6. 爲什麼webFrameLoadDelegate協議不起作用?
- 7. 爲什麼不能直接調用res.json?
- 8. 爲什麼使用自定義事件而不是直接方法調用?
- 9. __attribute__((不建議使用))不適用於Objective-C協議方法?
- 10. 協議類型的調用方法
- 11. 超級調用協議方法
- 12. 如何根據協議調用方法?
- 13. 有什麼辦法直接使用C#方法作爲委託?
- 14. 方法和協議有什麼區別
- 15. OCMock,爲什麼我不能期望協議的方法?
- 16. 爲什麼Objective-c協議採用其他協議?
- 17. 什麼協議XDocument.Load用戶
- 18. 爲什麼調用「apply」而不是直接調用函數?
- 19. 爲什麼不直接使用該屬性,而是使用getXXX()方法
- 20. 什麼是TDS協議版本8.0,爲什麼要使用它?
- 21. 爲什麼我可以通過Object#send來調用私有方法,但不能直接調用上述方法?
- 22. 在NSObject上使用非正式協議或使用可選方法的協議有什麼區別?
- 23. 爲什麼SSH不使用互鎖協議?
- 24. 調用Update方法直接
- 25. Omnipay sagepay使用什麼協議?
- 26. 我使用什麼協議? RTSP?
- 27. 什麼是ExternalAccessory協議使用IOS
- 28. lybrate使用什麼視頻流協議?
- 29. MySQL使用什麼通信協議?
- 30. Cassandra:在SSTableLoader中使用什麼協議?
因此,您不必爲整個UITableView類創建子類,只需執行像定製單元這樣的小任務。此外,它還允許您將您的代碼更好地耦合到IMO。 – 0xSina