2013-05-21 33 views
1

我一直在練習table views,我知道如何創建它們,但我希望在創建表視圖時更好地理解委託和源代碼。理解發生了什麼,爲什麼你需要代表和視圖來源

有人可以解釋創建表視圖時需要委託和來源嗎?

你爲什麼需要它們?

將代理人和來源連接到文件所有者或ViewController以及他們需要連接的原因時發生了什麼?

我想我需要一個關於代表和源代碼的一般性解釋,以及將它們連接到文件所有者或ViewController時會發生什麼?

+3

你甚至試過Google嗎? [代表和數據源](https://developer.apple.com/library/mac/#documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html#//apple_ref/doc/uid/TP40010810-CH11) – peko

+2

@ peko:因爲他/她是stackOverflow沉迷 –

+0

你能更具體地說明你想問什麼嗎?沒有冒犯的人,但一個100 +回購的人不應該問這樣的問題。應該有更多。 –

回答

9

委託和數據源允許tableview符合MVC design pattern,這是Cocoa和Cocoa Touch中的一個重複設計模式。

TableView本身提供[V]查看部分,委託提供[C] ontroller部分,而數據源提供[M] odel部分。

當您連接NIB文件中的委託和數據源時,您將直觀地創建此連接;您可以通過編程方式輕鬆完成。

+0

這裏我很困惑,再次,我看到這樣做的方式是,將委託和源代碼連接到相同的對象,文件的所有者或ViewController如何符合MVC設計模式,應該這真的連接到兩個不同的對象/類?對不起,如果我的問題沒有太大意義。 –

+0

@fs_tigre是的我猜這個委託和數據源*可能被連接到兩個不同的類,但這是非常罕見的。通常,委託和數據源對象訪問相同的信息,以便使用單個類。委託模式在Cocoa/Cocoa Touch中使用很多,所以你應該已經熟悉它了。數據源對於表視圖來說是獨特的,並且真正提供了一個額外的委託,只處理表視圖內容。 – trojanfoe

1

UITableViewDataSource協議被調用應用程序的數據模型爲UITableView對象的對象採用。數據源爲表視圖對象提供了構建和修改表視圖所需的信息。

Example: 

data source類型對象將數據提供給另一個對象。例如再次,所述UITableViewDataSource 具有方法如cellForRowAtIndexPathnumberOfRowsInSection口授什麼應在表

一個UITableView對象必須採用UITableViewDelegate協議的UITableViewDelegate被顯示。協議的可選方法允許委託管理選擇,配置節標題和頁腳,幫助刪除和重新排序單元格,並執行其他操作。

Example : 

A delegate類型對象響應另一個對象所採取的動作。例如,UITableViewDelegate 具有用於在用戶選擇table中的特定行時執行動作的方法,例如didSelectRowAtIndexPath

1

你不需要做任何連接,如果你高興地寫出下面的代碼:

tableview.delegate=self; 
tableview.dataSource=self; 
+0

是的,我之前已經看到過這個代理和數據源是自己的嗎? –

+1

親愛的@fs_tigre,這行代碼意味着委託dataSource方法將在編寫代碼的那個類中實現。 另外假設如果有另一個viewcontroller你想寫這些方法,那麼你必須簡單寫: 'tableview.delegate = otherObject; ' –

+0

明白了,謝謝。 –

2

代表: - 委託是行爲代表的,或協同,另一個對象的對象當該對象在程序中遇到事件時。委派對象通常是一個響應者對象 - 也就是說,對象繼承自AppKit中的NSResponder或UIKit中的UIResponder,它正在響應用戶事件。委託是被委派控制該事件的用戶界面的對象,或者至少被要求以應用特定的方式解釋事件。

數據源: - 數據源就像一個委託,只不過委託控制用戶界面而不是委託控制數據。數據源是NSView和UIView對象(如表視圖和大綱視圖)所需的一個插座,它們需要一個源來填充它們的可見數據行。視圖的數據源通常是充當委託的相同對象,但它可以是任何對象。和委託一樣,數據源必須實現一種或多種非正式協議的方法,以便爲視圖提供所需的數據,並在更高級的實現中處理用戶在這些視圖中直接編輯的數據。

查看詳細信息後藤 http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html

1

如果你的編程語言不支持多重繼承,你必須使用委託方法。在實現委託方法時,可以使用超類等對象函數。例如:

// define tableview row count 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1; 
} 

// define tableview height 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

} 

// define specific tableview cell 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = MyCell(); 
    return cell; 
} 
相關問題