例如,当我们创建tableview时,我们需要一些数据源方法,如
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messageArray.count
}
我不会在任何地方打电话。但是,iOS会这样做,而不是我,我想知道iOS是如何做到的?
iOS搜索tableview,如果它在视图中可用,则调用delegates和datasource方法,或者在我们声明uiTableView.delegate = self
或uiTableView.datasource = self
时调用它。
另一个是在viewDidLoad?
答案 0 :(得分:0)
因此,快速查看此内容就是将这两件事分开。
首先让我们看一下委托 https://developer.apple.com/documentation/uikit/uitableviewdelegate
委托提供了一组方法,您可以在代码中包含这些方法,为uitableview提供回调,以根据tableView中发生的事情执行某些协议定义的方法。
示例func tableView(UITableView, heightForRowAt: IndexPath)
此示例允许uitableview询问您如何在当前索引路径中显示某个单元格。
接下来让我们看一下数据源
https://developer.apple.com/documentation/uikit/uitableviewdatasource
Datasource以与委托类似的方式工作,但提供了一组不同的方法来帮助您填充表视图。
示例func numberOfSections(in: UITableView)
Apple的uitableview将调用此方法并询问tableview应显示多少部分。
最终,这些只是允许tableview与您的代码交互并帮助您使用配置显示表格的协议!
答案 1 :(得分:0)
tableView:numberOfRowsInSection
是UITableViewDatasource
协议的方法。数据源的方法由reloadData()
的方法UITableView
调用。
根据UITableView
的文件:
UITableView会覆盖UIView的layoutSubviews()方法 只有在创建UITableView的新实例时才调用reloadData() 或者在分配新数据源时。重新加载表视图会清除 当前状态,包括当前选择。但是,如果你 显式调用reloadData(),它清除此状态和任何后续状态 对layoutSubviews()的直接或间接调用不会触发重新加载。
答案 2 :(得分:0)
一般来说,这是具有委托的类的设置:
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
调用委托方法以获取您的信息。
希望这有助于向您解释代表如何在这里工作,什么称呼它,以及一般情况下发生了什么。如果您需要澄清,请不要犹豫!