如何在子类中覆盖tableView样式

问题描述 投票:0回答:2

我有一个在许多地方使用的超类,它只是一个符合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

    }

swift uitableview inheritance polymorphism
2个回答
0
投票

首先,由于您要继承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)
    }
}

0
投票

您可以在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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.