我正在尝试继承UITableViewController的子类,并通过重写控制器的loadView()
方法执行自定义视图设置。之所以这样做,是因为我需要在表格视图的顶部balanceView
和底部的浮动圆圈按钮。我做这样的事情,因为以后我需要这个“基本”控制器来处理不同的子类组,所以它们都必须具有这两个视图,但是它们将具有完全不同的tableViews。一切都正确加载,但是tableView
和viewDidLoad
中的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
}
答案 0 :(得分:0)
您需要删除 super.loadView()
您可以重写此方法以便手动创建视图。 如果选择这样做,则将视图层次结构的根视图分配给 视图属性。您创建的视图应该是唯一的实例,并且 不应与任何其他视图控制器对象共享。 您对此方法的自定义实现不应调用super。 Apple doc