tableView委托和数据源

时间:2015-01-23 11:28:53

标签: ios swift

我正在学习斯威夫特。有时我会看到Main.Storyboard用于设置tableView delegatedataSource(ctrl + click等等)。有时我发现它是通过编码完成的,而不是这样:

// create the variable for the tableview
IBOutlet weak var someTableView : UITableView!
// setup delegate and datasource
sefl.someTableView.delegate = self
self.someTableView.datasource = self

我确实理解第二种方式是如何工作的。但是很难通过没有IBOutlet设置的Main.Storyboard来实现它是如何工作的。

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

它的工作方式完全相同:)

让我更新原则:

在这种情况下,Apple有一个类,它必须适用于很多场景。 Apple决定使用一种称为委托的控制反转,其中工作流被反转(因此名称):而不是视图控制器通过调用其上的方法给tableView命令,它是tableView去取得它的通过调用方法来控制器的命令。 为了实现这种IoC(控制反转),TableView必须知道"地址"它必须要求其订单的对象。就像你必须要了解你的老板'电子邮件地址问他的东西。因此,UITableView类作为一个名为dataSource的属性,意味着存储该地址。 现在作为ViewController程序员,您必须将此属性设置为视图控制器的地址,该视图控制器将为该表视图提供顺序。 2种方法:

代码中的

:在视图控制器中,你有一个指向tableview的属性(如果从故事板链接,它实际上被称为IBOutlet,但不一定是),你设置它'委托财产自我。 (意思是'嘿tableView,你的老板就是我自己)

或者您在故事板中执行此操作,因为tableView的图形模板允许您从tableView按住Ctrl +拖动到ViewController并设置数据源连接。在这种情况下,故事板必须找到tableView的地址(因为它是创建它的那个,它有点简单)并将它的委托属性设置为该地址。查看控制器(意思是嘿tableView,你的老板会是这个人)

无论哪种方式,viewController必须准备好回答TableView中的所有问题,因此符合UITableViewDataSource协议。 委托方案是一样的。

答案 1 :(得分:0)

了解视图加载在iOS中的工作原理非常重要。您的xib将被转换为视图层次结构,并将它们加载到内存中。当您创建这些视图的IBOutlet时,您的代码中将加载该视图的引用。如果您不创建IBOutlet,则并不意味着视图不存在。它在那里,它在记忆中。

设置delegate的{​​{1}}和dataSource以及将tableView加载到内存时,它会设置已加载的{{1}的委托和dataSource到你指定的类。如果您没有引用,那就无所谓了。