iOS如何调用委托和数据源方法?
例如,当我们创建tableview时,我们需要一些数据源方法,如iOS如何调用委托和数据源方法?,ios,swift,uitableview,Ios,Swift,Uitableview,例如,当我们创建tableview时,我们需要一些数据源方法,如 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return messageArray.count } 我哪儿也不叫这个。然而,iOS代替了我,我想知道iOS是怎么做到的 iOS搜索tableview,如果它在视图上可用,则调用委托和数据源方法,或者在声明uiTableVie
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messageArray.count
}
我哪儿也不叫这个。然而,iOS代替了我,我想知道iOS是怎么做到的
iOS搜索tableview,如果它在视图上可用,则调用委托和数据源方法,或者在声明uiTableView.delegate=self
或uiTableView.datasource=self
时调用它。
另一个是在
viewdiload?
之前调用的方法,因此快速查看这一点的方法是将这两件事分开
首先让我们看一下代理
委托提供了一组方法,您可以在代码中包含这些方法,这些方法为uitableview提供回调,以根据tableView中发生的情况执行某些协议定义的方法
示例func tableView(UITableView,heightForRowAt:IndexPath)
此示例允许uitableview询问您如何在此当前位置显示某个单元格
接下来让我们看看数据源
Datasource的工作方式与委托类似,但提供了一组不同的方法来帮助您填充表视图
示例func numberOfSections(在:UITableView中)
Apple的uitableview将调用此方法,并询问tableview我应该显示多少节
最终,这些只是允许tableview与您的代码交互并帮助您使用配置显示表的协议
tableView:numberOfRowsInSection
是uitableview数据源
协议的方法。数据源的方法由UITableView
的方法reloadData()
调用
根据UITableView
的文档:
UITableView重写UIView的layoutSubviews()方法,以便
仅在创建UITableView的新实例时调用reloadData()
或者在分配新数据源时。重新加载表视图将清除
当前状态,包括当前选择。然而,如果你
显式调用reloadData(),它将清除此状态和任何后续状态
对layoutSubviews()的直接或间接调用不会触发重新加载
一般来说,这是带有委托的类的设置:
class SimpleTableView {
var delegate: SimpleTableViewDelegate?
// ...
func renderCell(at row: Int) { // called whenever the table needs to render a cell
let cell = SimpleTableViewCell()
cell.frame.size.height = delegate?.tableView(self, cellHeightForRow: row)
// continue rendering cell
}
}
协议SimpleTableViewDelegate
包含委托方法。它看起来像这样:
protocol SimpleTableViewDelegate {
func tableView(_ tableView: SimpleTableView, cellHeightForRow: Int) -> CGFloat
}
所以我们这里有一个类,SimpleableView
,它从某处(视图控制器)获取数据。这就是代理如何发挥作用:
class ViewController: UIViewController, SimpleTableViewDelegate {
var tableView = SimpleTableView()
override func viewDidLoad() {
tableView.delegate = self
}
func tableView(_ tableView: SimpleTableView, cellHeightForRow: Int) -> CGFloat {
return 44
}
}
这本质上就是委托的工作方式,这就是真正的tableView
所做的。您可以设置tableView
委托,并且tableView
调用委托方法以从您那里获取信息
希望这有助于向您解释该代表在这里是如何工作的,什么叫它,以及通常发生了什么。如果您需要澄清,请毫不犹豫地询问 多谢各位。所以当我设置tableView.delegate=self时,delegate被称为right?@John,delegate只是一个对象,一个变量。当tableView需要来自视图控制器的信息(如单元格高度)时,它会调用委托上的相应方法。