我有一个在许多地方使用的超类,它只是一个符合tableView委托的类。
class SuperTableViewController: UITableViewDataSource, UITableViewDelegate {
var tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .plain)
return tableView
}()
... //more code
}
我想创建一个继承自SuperTableViewController的子类,但是它应该具有分组样式,我不确定如何在子类中重写tableview样式:
class SubClassController: SuperTableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView = UITableView(frame: .zero, style: .grouped) // this doesn't work
}
... //more code
}
首先,由于您要继承SuperTableViewController
作为UIViewController
中的SubClassController
,因此SuperTableViewController
必须为UIViewController
类型。
class SuperTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .plain)
return tableView
}()
}
然后在SubClassController's
viewDidLoad()
方法中,您可以使用tableView
grouped
简单地设置style
的新实例,即
class SubClassController: SuperTableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView = UITableView(frame: .zero, style: .grouped)
}
}
您可以在SuperTableViewController
中引入一个tableView样式属性,如下所示,在子类中引入override
。这样,您不必初始化整个tableView
或在子类中完全注册单元格。
class SuperTableViewController: UITableViewDataSource, UITableViewDelegate {
var tableViewStyle: UITableView.Style {
return .plain
}
lazy var tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: self.tableViewStyle)
return tableView
}()
}
class SubClassController: SuperTableViewController {
override var tableViewStyle: UITableView.Style {
return .grouped
}
}