[英]Creating reusable FooterView for different TableViews (Swift 5)
我创建了 class FooterView:UIView。 我用它为我的 TableView 创建 FooterView。 但我也想重用这个 class 在我的其他 TableView 中创建 FooterView。 当我尝试向 setupElements () function 添加参数以在那里传递所需的 TableView 并根据它更改 Label 文本时,但初始化程序不允许我这样做。 我怎样才能做到这一点? 此外,Swift 不允许我直接调用 setupElements () function,即使我删除了“私有”。 我的代码:
class FooterView: UIView {
private var footerLabel: UILabel = {
...
}()
private func setupElements() {
addSubview(footerLabel)
...
footerLabel.text = "Table is empty"
}
override init(frame: CGRect) {
super.init(frame: frame)
setupElements()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
...
class TableViewController: UIViewController {
private lazy var footerView = FooterView()
private var array: [String] = []
func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}
private func setupTableView() {
tableView.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: LibraryCell.reuseId)
if array.count == 0 {
tableView.tableFooterView = footerView
}
}
}
extension TableViewController: UITableViewDelegate, UITableViewDataSource {...}
经过大量搜索,我解决了我的问题。 我删除了初始化并通过 setupFooterView function(对于 vc:UIViewController)创建了一个 FooterView,我将需要的 ViewController 作为参数传递到其中。 代码如下所示:
class FooterView: UIView {
private var footerLabel: UILabel = {
let label = UILabel()
...
return label
}()
func setupFooterView(for vc: UIViewController) -> UIView {
let footerView = UIView()
footerView.addSubview(footerLabel)
...
if vc is TableViewController {
footerLabel.text = "..."
} else if vc is SecondTableViewController {
footerLabel.text = "..."
}
return footerView
}
}
将 FooterView 添加到我需要的 ViewController 中:
...
private lazy var footerView = FooterView()
...
tableView.tableFooterView = footerView.setupFooterView(for: self)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.