UITableViewController.tableView = nil创建子类并覆盖loadView()时

时间:2018-06-26 06:19:05

标签: ios swift uitableview uikit

我正在尝试继承UITableViewController的子类,并通过重写控制器的loadView()方法执行自定义视图设置。之所以这样做,是因为我需要在表格视图的顶部balanceView和底部的浮动圆圈按钮。我做这样的事情,因为以后我需要这个“基本”控制器来处理不同的子类组,所以它们都必须具有这两个视图,但是它们将具有完全不同的tableViews。一切都正确加载,但是tableViewviewDidLoad中的viewDidAppear属性为nil,但是成功调用了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 :(得分:0)

您需要删除 super.loadView()

  

您可以重写此方法以便手动创建视图。   如果选择这样做,则将视图层次结构的根视图分配给   视图属性。您创建的视图应该是唯一的实例,并且   不应与任何其他视图控制器对象共享。   您对此方法的自定义实现不应调用super。   Apple doc