Как переопределить стиль tableView в подклассе - PullRequest
1 голос
/ 23 октября 2019

У меня есть суперкласс, который используется во многих местах, и это просто класс, который соответствует делегатам tableView.


    class SuperTableViewController: UITableViewDataSource, UITableViewDelegate {

        var tableView: UITableView = {

            let tableView = UITableView(frame: .zero, style: .plain)

            return tableView
        }()

    ... //more code

    }

Я хочу создать подкласс, который наследуется от SuperTableViewController, но он должен иметь сгруппированный стиль, я не уверен, как переопределить стиль табличного представления в подклассе:


    class SubClassController: SuperTableViewController {

        override func viewDidLoad() {
            super.viewDidLoad()

     tableView = UITableView(frame: .zero, style: .grouped) // this doesn't work
    }

    ... //more code

    }

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы можете ввести свойство стиля tableView в SuperTableViewController, как показано ниже, и 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
    }
}
0 голосов
/ 23 октября 2019

Прежде всего, поскольку вы наследуете 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...