0

最近,iOS 开发中可能发生了一些变化。现在我们必须在 SceneDelegate 中设置我们的窗口和根 VC,而不是 AppDelegate 的 didFinishLauching。(请不要使用故事板!)好吧,这不是那么困难,也没有那么不同。但现在看来我现在什至无法将我的 UITableViewDatasource 上的单元格出列。就这么简单!我又做错了什么?我将行数设置为 80 只是为了确保会出现一些东西,但那里没有运气。我在我的 ViewController(嵌入在 navigationController 中)中获得了 systemTeal 彩色 tableView,就是这样。有任何想法吗?

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    let cellId = "cellId"

    lazy var tableView: UITableView = {
        let tb = UITableView()
        tb.translatesAutoresizingMaskIntoConstraints = false
        return tb
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .systemPink
        setupTableView()
    }

    fileprivate func  setupTableView() {
        tableView.delegate = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
        tableView.backgroundColor = .systemTeal
        view.addSubview(tableView)
        NSLayoutConstraint.activate([
            tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            tableView.topAnchor.constraint(equalTo: view.topAnchor),
            tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
            tableView.widthAnchor.constraint(equalTo: view.widthAnchor),
            tableView.heightAnchor.constraint(equalTo: view.heightAnchor)
        ])
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 80 }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCell(withIdentifier: cellId)!
        cell.backgroundColor = .systemRed
        cell.textLabel?.text = "cell: \(indexPath.row)"
        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 50 }

    func numberOfSections(in tableView: UITableView) -> Int { 1 }
}
4

2 回答 2

1

除了设置委托之外,您还应该设置数据源:

tableView.dataSource = self
于 2019-11-25T21:12:48.280 回答
1

当您创建ViewController 包含a tableView(而不是UITableViewController)的自定义时,您必须记住设置DataSourceDelegate如果需要)。在这种情况下,获取委托和数据源的最佳位置之一是在闭包中:

lazy var tableView: UITableView = {
    let tb = UITableView()
    tb.dataSource = self
    tb.delegate = self
    tb.translatesAutoresizingMaskIntoConstraints = false
    return tb
}()
于 2019-11-25T21:18:00.460 回答