我正在以编程方式创建表格视图
extension UITableView {
static var tableView: UITableView {
let tableView = UITableView()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "menuCell")
tableView.translatesAutoresizingMaskIntoConstraints = false
return tableView
}
}
我在viewdidload期间正在调用绑定函数
private func setUpBindings() {
guard let viewModel = self.viewModel else { return }
viewModel.menuItems
.bind(to: tableView.rx.items(cellIdentifier: "menuCell", cellType: UITableViewCell.self)) { [weak self] row, model, cell in
Logger.info("Called")
cell.selectionStyle = .none
cell.textLabel?.text = model.uppercased()
cell.textLabel?.textColor = self?.selectedRow == row ? .white : .darkGray
cell.backgroundColor = self?.selectedRow == row
? ColorPreference.mainColor
: UIColor.clear
}
.disposed(by: self.disposeBag)
self.tableView.reloadData()
}
我的表视图的数据源来自我的视图模型中的一个可观察的
let menuItems = Observable.just([
"Recommended",
"Dashboard",
"Settings"
])
我遇到的问题是tableview
没有调用bind函数。显然,可观察对象中有一些应该绑定的项目,但是我所做的每个可能的测试都从未执行过tableview绑定的主体。
为证实我的理论,我在setupBindings()中测试了此代码,并执行了其主体,并打印出“ 2019-12-01 16:36:18 |信息| [“推荐”,“仪表板”,“设置“]”
viewModel.menuItems
.bind(onNext: { items in
Logger.info("\(items)")
})
.disposed(by: self.disposeBag)
我查看了正确设置tableview数据源的文档,并做了相当多的研究。 我很困惑,需要帮助。
答案 0 :(得分:0)
确实是愚蠢的错误。在修复它之前,我的表视图约束看起来像这样
self.tableView.topAnchor.constraint(equalTo: appLabel.bottomAnchor, constant: 30).isActive = true
self.tableView.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
self.tableView.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
我忘记将tableview的底部约束设置为其超级视图。根据我的推断,这阻止了在视图中显示tableview。没有显示它,就无法设置表视图的数据源,正如Arvin在评论中指出的那样。