UITableViewController.tableView = nil при создании подкласса и переопределении loadView () - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь создать подкласс UITableViewController и выполнить пользовательскую настройку вида с помощью переопределенного метода контроллера loadView().Я делаю это, потому что мне нужно balanceView в верхней части представления таблицы и кнопка с плавающим кругом внизу.Я делаю такие вещи, потому что позже мне понадобится этот «базовый» контроллер для группы разных его подклассов, у них всех должны быть эти два представления, но у них будут совершенно разные tableView.Все загружается правильно, но свойство tableView равно nil в viewDidLoad и viewDidAppear, но методы источника данных tableViews и делегата вызываются успешно!Что я делаю не так?(Может быть, мне нужно вместо этого создать подкласс UIViewController?) Вот мой код:

Это мой подкласс UITableViewController loadView:

override func loadView() {
    super.loadView()

    let bView = UIView()

    balanceView = BalanceViewSwift()
    balanceView.translatesAutoresizingMaskIntoConstraints = false
    bView.addSubview(balanceView)

    tableView = UITableView(frame: .zero, style: .plain)
    tableView.translatesAutoresizingMaskIntoConstraints = false
    bView.addSubview(tableView)

    balanceView.addAnchorToSuperview(anchor: .top, margin: 0)
        .addAnchorToSuperview(anchor: .leading, margin: 0)
        .addAnchorToSuperview(anchor: .trailing, margin: 0).end()

    tableView.addAnchorToSuperview(anchor: .bottom, margin: 0)
        .addAnchorToSuperview(anchor: .leading, margin: 0)
        .addAnchorToSuperview(anchor: .trailing, margin: 0).end()

    balanceView.bottomAnchor.constraint(equalTo: tableView.topAnchor).isActive = true

    addButtonView = CircleButton()
    addButtonView.translatesAutoresizingMaskIntoConstraints = false
    addButtonView.backgroundColor = .red
    addButtonView.tintColor = .white
    addButtonView.setTitle("+", for: .normal)
    addButtonView.addTarget(self, action: #selector(BalanceTableViewController.addButtonTapped(_:)), for: .touchUpInside)

    bView.addSubview(addButtonView)

    addButtonView.addAnchorToSuperview(anchor: .bottom, margin: 16).addAnchorToSuperview(anchor: .trailing, margin: 16).end()
    addButtonView.heightAnchor.constraint(equalTo: addButtonView.widthAnchor).isActive = true
    addButtonView.widthAnchor.constraint(equalToConstant: 50).isActive = true

    tableView.delegate = self
    tableView.dataSource = self

    balanceView.addFundsButtonIsHidden = !balanceViewAddFundsButtonIsVisible
    addButtonView.isHidden = !circleBottomAddButtonIsVisible

    view = bView
}

1 Ответ

0 голосов
/ 05 июля 2018

Вам необходимо удалить super.loadView ()

Вы можете переопределить этот метод для создания ваших представлений вручную.Если вы решите это сделать, присвойте корневое представление иерархии вашего представления свойству представления.Представления, которые вы создаете, должны быть уникальными экземплярами и не должны использоваться совместно с любым другим объектом контроллера представления. Ваша пользовательская реализация этого метода не должна вызывать super. Apple doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...