1

我一直在练习table views并且知道如何创建它们,但我希望在创建表视图时更好地了解委托和源。

有人可以解释在创建表视图时需要委托和源吗?

你为什么需要它们?

当您将委托和源连接到文件所有者时会发生什么,或者ViewController为什么需要连接它们?

我想我需要一个关于代表和来源的一般解释,以及当你将它们连接到文件所有者时会发生什么ViewController

4

5 回答 5

9

委托和数据源允许 tableview 符合MVC 设计模式,这是 Cocoa 和 Cocoa Touch 中重复出现的设计模式。

TableView 本身提供了 [V]iew 部分,delegate 提供了 [C]ontroller 部分,而数据源提供了 [M]odel 部分。

当您在 NIB 文件中连接委托和数据源时,您正在直观地创建此连接;您可以轻松地以编程方式进行操作。

于 2013-05-21T12:06:41.947 回答
2

委托:- 委托是一个对象,当该对象遇到程序中的事件时,该对象代表另一个对象或与该对象协作。委托对象通常是响应者对象——即从 AppKit 中的 NSResponder 或 UIKit 中的 UIResponder 继承的对象——响应用户事件。委托是一个对象,它被委托控制该事件的用户界面,或者至少被要求以特定于应用程序的方式解释该事件。

数据源:- 数据源类似于委托,不同之处在于,它不是对用户界面的委托控制,而是对数据的委托控制。数据源是由 NSView 和 UIView 对象(例如表视图和大纲视图)持有的一个出口,它们需要一个源来填充它们的可见数据行。视图的数据源通常是充当其委托的同一个对象,但它可以是任何对象。与委托一样,数据源必须实现一种或多种非正式协议的方法,以向视图提供所需的数据,并且在更高级的实现中,处理用户在此类视图中直接编辑的数据。

有关详细信息,请转到 http://developer.apple.com/library/ios/#documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html

于 2013-05-21T13:36:57.377 回答
1

UITableViewDataSource协议被一个对象采用,该对象调解应用程序的对象数据模型UITableView。数据源为表视图对象提供构造和修改表视图所需的信息。

Example:

data source类型对象将数据提供给另一个对象。再例如,UITableViewDataSource protocol具有诸如cellForRowAtIndexPathnumberOfRowsInSection口述应在表格中显示的内容之类的方法

对象的UITableViewDelegateUITableView必须采用协议UITableViewDelegate。协议的可选方法允许代理管理选择、配置部分标题和页脚、帮助删除和重新排序单元格以及执行其他操作。

Example : 

一个delegate类型对象响应另一个对象采取的动作。例如,它们UITableViewDelegate protocol具有诸如didSelectRowAtIndexPath在用户选择 中的特定行时执行动作的方法table

于 2013-05-21T12:05:33.713 回答
1

如果您愿意编写以下代码,则无需进行任何连接:

tableview.delegate=self;
tableview.dataSource=self;
于 2013-05-21T12:39:42.900 回答
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;
}
于 2013-05-21T13:53:57.107 回答