我一直在練習table views
,我知道如何創建它們,但我希望在創建表視圖時更好地理解委託和源代碼。理解發生了什麼,爲什麼你需要代表和視圖來源
有人可以解釋創建表視圖時需要委託和來源嗎?
你爲什麼需要它們?
將代理人和來源連接到文件所有者或ViewController
以及他們需要連接的原因時發生了什麼?
我想我需要一個關於代表和源代碼的一般性解釋,以及將它們連接到文件所有者或ViewController
時會發生什麼?
我一直在練習table views
,我知道如何創建它們,但我希望在創建表視圖時更好地理解委託和源代碼。理解發生了什麼,爲什麼你需要代表和視圖來源
有人可以解釋創建表視圖時需要委託和來源嗎?
你爲什麼需要它們?
將代理人和來源連接到文件所有者或ViewController
以及他們需要連接的原因時發生了什麼?
我想我需要一個關於代表和源代碼的一般性解釋,以及將它們連接到文件所有者或ViewController
時會發生什麼?
委託和數據源允許tableview符合MVC design pattern,這是Cocoa和Cocoa Touch中的一個重複設計模式。
TableView本身提供[V]查看部分,委託提供[C] ontroller部分,而數據源提供[M] odel部分。
當您連接NIB文件中的委託和數據源時,您將直觀地創建此連接;您可以通過編程方式輕鬆完成。
這裏我很困惑,再次,我看到這樣做的方式是,將委託和源代碼連接到相同的對象,文件的所有者或ViewController如何符合MVC設計模式,應該這真的連接到兩個不同的對象/類?對不起,如果我的問題沒有太大意義。 –
@fs_tigre是的我猜這個委託和數據源*可能被連接到兩個不同的類,但這是非常罕見的。通常,委託和數據源對象訪問相同的信息,以便使用單個類。委託模式在Cocoa/Cocoa Touch中使用很多,所以你應該已經熟悉它了。數據源對於表視圖來說是獨特的,並且真正提供了一個額外的委託,只處理表視圖內容。 – trojanfoe
UITableViewDataSource協議被調用應用程序的數據模型爲UITableView
對象的對象採用。數據源爲表視圖對象提供了構建和修改表視圖所需的信息。
Example:
而data source
類型對象將數據提供給另一個對象。例如再次,所述UITableViewDataSource
具有方法如cellForRowAtIndexPath
和numberOfRowsInSection
口授什麼應在表
一個UITableView
對象必須採用UITableViewDelegate
協議的UITableViewDelegate被顯示。協議的可選方法允許委託管理選擇,配置節標題和頁腳,幫助刪除和重新排序單元格,並執行其他操作。
Example :
A delegate
類型對象響應另一個對象所採取的動作。例如,UITableViewDelegate
具有用於在用戶選擇table
中的特定行時執行動作的方法,例如didSelectRowAtIndexPath
。
你不需要做任何連接,如果你高興地寫出下面的代碼:
tableview.delegate=self;
tableview.dataSource=self;
是的,我之前已經看到過這個代理和數據源是自己的嗎? –
親愛的@fs_tigre,這行代碼意味着委託dataSource方法將在編寫代碼的那個類中實現。 另外假設如果有另一個viewcontroller你想寫這些方法,那麼你必須簡單寫: 'tableview.delegate = otherObject; ' –
明白了,謝謝。 –
代表: - 委託是行爲代表的,或協同,另一個對象的對象當該對象在程序中遇到事件時。委派對象通常是一個響應者對象 - 也就是說,對象繼承自AppKit中的NSResponder或UIKit中的UIResponder,它正在響應用戶事件。委託是被委派控制該事件的用戶界面的對象,或者至少被要求以應用特定的方式解釋事件。
數據源: - 數據源就像一個委託,只不過委託控制用戶界面而不是委託控制數據。數據源是NSView和UIView對象(如表視圖和大綱視圖)所需的一個插座,它們需要一個源來填充它們的可見數據行。視圖的數據源通常是充當委託的相同對象,但它可以是任何對象。和委託一樣,數據源必須實現一種或多種非正式協議的方法,以便爲視圖提供所需的數據,並在更高級的實現中處理用戶在這些視圖中直接編輯的數據。
如果你的編程語言不支持多重繼承,你必須使用委託方法。在實現委託方法時,可以使用超類等對象函數。例如:
// 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;
}
你甚至試過Google嗎? [代表和數據源](https://developer.apple.com/library/mac/#documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html#//apple_ref/doc/uid/TP40010810-CH11) – peko
@ peko:因爲他/她是stackOverflow沉迷 –
你能更具體地說明你想問什麼嗎?沒有冒犯的人,但一個100 +回購的人不應該問這樣的問題。應該有更多。 –