我一直在练习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 +回购的人不应该问这样的问题。应该有更多。 –