具有自定义节标题的可重复使用的UITableView“基类”

时间:2019-09-10 06:31:10

标签: swift uitableview

我有一个自定义的表格视图节标题(彩色线条集),在大约十二种不同的表格视图中使用。目前,我正在每个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,以便将此代码编写一次并自动应用于我的任何指定表视图?

1 个答案:

答案 0 :(得分:2)

创建一个class BaseVC并遵循UITableViewDelegate protocol。在其中实现viewForHeaderInSectionheightForHeaderInSection方法,即

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
    }
}