self.tableView.delegate = 自我斯威夫特
Posted
技术标签:
【中文标题】self.tableView.delegate = 自我斯威夫特【英文标题】:self.tableView.delegate = self Swift 【发布时间】:2016-09-12 01:00:48 【问题描述】:如果我有一个 UIViewController 并且我在情节提要中将一个 tableView 连接到它,连接 tableview 插座,然后通过连接检查器连接数据源和委托方法(cntrl+拖动到 vc 橙色圆圈图标),我仍然需要将self.tableView.delegate = self
和self.tableView.datasource = self
添加到实际的视图控制器中吗?当然,在实际的 vc 中,我正在实现 tableView 数据/委托协议。
此外,我假设无论答案是否相同,都可以通过故事板以相同的方式连接集合视图控制器?
添加它的优缺点是什么?
class FooController:UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad()
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.datasource = self
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int ...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell ...
【问题讨论】:
根据您使用协议标记问题,似乎对协议与委托有点混淆。大多数 ios 开发人员最初对此感到困惑。我建议你看看这个问题here 【参考方案1】:我还需要将 self.tableView.delegate = self 添加到实际的视图控制器吗?
没有。您通过在情节提要中建立连接来做到这一点。它们完全相同:对delegate
属性的赋值,以两种不同的方式表示(一种在代码中,一种在Interface Builder 中以“图形方式”)。您只需执行其中一项即可。
但是如果你的视图控制器是一个表视图控制器(UITableViewController 子类),那么你就都不做,因为表视图控制器已经了em> 表视图的数据源和委托。集合视图 controller(UICollectionViewController 子类)也是如此;它是已经集合视图的数据源和委托。
【讨论】:
【参考方案2】:我通常在 View Controller 的 viewDidLoad
方法中以编程方式设置 delegate
和 dataSource
。
因为有时我错过了将它们设置在 nib 中,或者我通过编码创建了我的表格视图。
正如马特的回答,它们是一样的。你可以选择一种方式让你快乐。 快乐的编码,兄弟/。
【讨论】:
【参考方案3】:我同意 Matt 和 Quang 的回答,但有时我们需要在其他 ViewController 类中重用相同的 tableview 及其委托和数据源,此时与数据源和委托的出口连接可能不起作用,这意味着您的委托方法可能不会被称为。
示例 -
我有一个带有 tableview 的 ViewController(A 类)。我需要将此控制器的整个视图重用于另一个类(B 类)
A.view.addSubview(B.view)
所以在这种情况下你必须要写下面的代码
Class A:UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad()
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.datasource = self
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
【讨论】:
以上是关于self.tableView.delegate = 自我斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章