2013-07-10 52 views
1

例如:UITableviewDelegate協議有tableView:didSelectRowAtIndexPath:。爲什麼將它作爲協議中的委託方法而不是UITableView類中的方法並直接調用它?爲什麼使用協議,不直接調用方法?

+4

因此,您不必爲整個UITableView類創建子類,只需執行像定製單元這樣的小任務。此外,它還允許您將您的代碼更好地耦合到IMO。 – 0xSina

回答

4

它實際上在UITableViewDataSource不是委託這是一個重要的區別。

代表團的目的是將責任轉移給客戶代碼。 UITableView本身不知道它需要創建什麼類型的單元格。您的應用程序是知道細胞應該是什麼樣子以及它們的功能的應用程序。這就是tableView要求數據源(由協議定義)創建單元的原因。

在Apple框架中,delegate通常用於偵聽對象事件,而dataSource用於爲某些內容提供內容。這兩種都是委託模式的形式。

如果您問是因爲您想問一個表格視圖 - 「該索引路徑上的單元格是什麼?」你可以使用實例方法cellForRowAtIndexPath

0

因爲你可能需要一個不同的類是數據源的表視圖在UITableViewController

下面是一個簡單的,有點做作的例子來說明......

想象一下,你有兩個表視圖的視圖控制器在它顯示DataA的和數據B,你可以下一個按下按鈕的每個表去該表是全屏的另一個視圖。您可以將其設置爲一個視圖控制器,其中有兩個UITableView和兩個UIButton,第二個控制器MyFullScreenTableViewController這是一個UITableViewController子類,那麼您將擁有兩個完全獨立的對象,一個是DataA表的數據源,一個是DataB表的數據源。因此,這些對象在第一個視圖中爲這兩個表提供了單元格,並且它們還在全屏控制器中提供了單元格 - 您可以根據正在查看的表傳遞正確的數據源。

相關問題