我有一个自定义的表格视图节标题(彩色线条集),在大约十二种不同的表格视图中使用。目前,我正在每个UITableViewDelegate处理程序中剪切并粘贴相同的代码。
例如,如下所示:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
let lineView = UIView(frame: CGRect(x: 40, y: 0, width: tableView.frame.width - 80, height: 1))
lineView.backgroundColor = .separator
headerView.addSubview(lineView)
return headerView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 1
}
是否可以以某种方式继承或扩展UITableView,以便将此代码编写一次并自动应用于我的任何指定表视图?
答案 0 :(得分:2)
创建一个class BaseVC
并遵循UITableViewDelegate
protocol
。在其中实现viewForHeaderInSection
和heightForHeaderInSection
方法,即
class BaseVC: UIViewController, UITableViewDelegate {
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = UIView()
let lineView = UIView(frame: CGRect(x: 40, y: 0, width: tableView.frame.width - 80, height: 1))
lineView.backgroundColor = .separator
headerView.addSubview(lineView)
return headerView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 1
}
}
现在,像这样从ViewControllers
继承您的BaseVC
,
class VC: BaseVC, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 5
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
return cell
}
}