Данные таблицы не устанавливаются при использовании RxSwift - PullRequest
0 голосов
/ 02 декабря 2019

Я создаю свое табличное представление программно

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. Ясно, что в наблюдаемой области есть элементы, которые должны быть связаны, но каждый возможный тест, который я сделал, никогда не выполнял тело привязки к табличному виду.

Чтобы подтвердить свою теорию, я протестировал этот код в 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 и сделал мою справедливую долю исследований. Я в тупике и мне нужна помощь.

1 Ответ

0 голосов
/ 02 декабря 2019

Действительно глупая ошибка. До того, как я это исправил, мои ограничения табличного вида выглядели так:

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

Я забыл установить нижнее ограничение табличного представления на его суперпредставление. Из того, что я мог экстраполировать, это помешало отображению таблицы в представлении. Без показа невозможно установить источник данных таблицы, как указал Арвин в комментариях.

...