2013-05-21 35 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; 
} 
相关问题