簡體   English   中英

使用 RxSwift 時未設置 Tableview 數據

[英]Tableview data isn't being set while using RxSwift

我正在以編程方式創建我的 tableview

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()
}

我的 tableview 的數據源來自我的 viewmodel 中的一個 observable

let menuItems = Observable.just([
    "Recommended",
    "Dashboard",
    "Settings"
])

我遇到的問題是沒有為tableview調用 bind 函數。 observable 中顯然有一些項目應該被綁定,但我所做的每一個可能的測試都從未執行過 tableview 綁定的主體。

為了證實我的理論,我在 setupBindings() 中測試了這段代碼並執行了它的主體,打印出 "2019-12-01 16:36:18 | INFO | ["Recommended", "Dashboard", "Settings"] “

viewModel.menuItems
        .bind(onNext: { items in
            Logger.info("\(items)")
        })
        .disposed(by: self.disposeBag)

我查看了有關正確設置 tableview 數據源的文檔,並進行了相當多的研究。 我很難過,需要幫助。

真是愚蠢的錯誤。 在我修復它之前,我的 tableview 約束看起來像這樣

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 在視圖中顯示。 如果不顯示,就不可能設置表視圖的數據源,正如 Arvin 在評論中指出的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM