gpt4 book ai didi

ios - 设置自定义 UITableViewHeaderFooterView 以实现可重用性

转载 作者:行者123 更新时间:2023-11-28 05:43:24 27 4
gpt4 key购买 nike

我定义并注册了一个自定义节标题 View ,如下所示:

class MySectionHeaderView : UITableViewHeaderFooterView {
var section : Int?
var button : UIButton?
}

class MyTableViewController : UITableViewController {

override func loadView() {
super.loadView()
self.tableView.register(MySectionHeaderView.self,
forHeaderFooterViewReuseIdentifier: "reuseIdentifier")
}

override func tableView(_ tableView: UITableView,
viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(
withIdentifier: "reuseIdentifier")! as! MySectionHeaderView
header.textLabel?.text = titleForHeader(section: section)
header.section = section
if header.button == nil {
let button = UIButton(type: .system)
// ... configure button ... //
header.button = button
}
return header
}
}

这行得通。然而,将按钮和其他初始化器放在函数 tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView 中是非常奇怪的。因为它打破了关注点分离原则。这个功能应该只是关于设置标签等。

有没有办法初始化标题 View ,在类 MySectionHeaderView 的某处创建子元素?

最佳答案

viewForHeaderInSection 中仅设置您的 header 的数据源相关信息。将所有设置代码移到自定义 header 类中。

class MySectionHeaderView: UITableViewHeaderFooterView {
var section: Int?
lazy var button: UIButton = {
let button = UIButton(type: .system)
// ... configure button ... //
return button
}()

override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)

//Add subviews and set up constraints
}
}

现在在你的委托(delegate)方法中,

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = tableView.dequeueReusableHeaderFooterView(
withIdentifier: "reuseIdentifier")! as! MySectionHeaderView
header.textLabel?.text = titleForHeader(section: section)
header.section = section
return header
}

关于ios - 设置自定义 UITableViewHeaderFooterView 以实现可重用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55761579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com