【问题标题】:RxSwift - auto reloading UITableView initialized with ObservableRxSwift - 自动重新加载使用 Observable 初始化的 UITableView
【发布时间】:2017-12-18 00:01:40
【问题描述】:

我有主要的UITableView 和一些填充的待办事项,使用了一组 Observables:

// on viewDidLoad
self.todosViewModel.todos.asObservable()
    .bind(to: tableView.rx.items(cellIdentifier: "TodoViewCell", cellType: TodoTableViewCell.self)) { (row, todo, cell) in
        cell.status.image = todo.getStatusImage()
        cell.title.text = todo.title.value
        cell.todoDescription.text = todo.description.value
        cell.dueDate.text = String(describing: Utilities.dateFormatter.string(from: todo.dueDate.value))
}.disposed(by: disposeBag)

在另一个屏幕上,我可以添加/编辑数据,然后单击“保存”按钮添加新的待办事项或修改正在编辑的待办事项。这很好用,除了tableView 不会自动重新加载,迫使我在viewDidAppear 上调用tableView.reloadData(),这是在另一个屏幕被关闭时触发的。

所以,

todosViewModel 变量更新时,我是否有一种本地方式自动重新加载表格

编辑:

如果在待办事项的版本屏幕上我将todosViewModelvalue 属性与相同的值重新关联,它也可以工作:

self.todosViewModel.todos.value = self.todosViewModel.todos.value

这很难看,但我只知道如何使用其中一种方式重新加载 tableView。

【问题讨论】:

  • 您确定todos 在您保存或编辑项目时发出任何事件吗?
  • 不是直接的。当我append 一个新的todo 或将一个新值重新关联到基础todos 时,它会起作用。当我编辑时,没有。我不知道应该如何向填写UITableView 的模型发送事件。

标签: ios uitableview reactive-programming rx-swift reactivex


【解决方案1】:

当我添加一个新的待办事项或将一个新值重新关联到基础待办事项时,它会起作用。当我编辑时,没有。

这就是重点。要更新UITableView,您的todos 必须在内部项目已被编辑时发出,或者您必须在单元格内绑定todo 中的某些内容(这样您无法更改单元格的高度,但您可以推送单元格上的一些动态信息)。

另一种选择是将todo 中的一些可观察对象映射到显示它的单元格的索引,然后调用UITableView.reloadRows 来更新您编辑的单元格。

我建议你看看RxDataSources examples

【讨论】:

  • 如果我这样做没有警告或性能问题,我可以忍受。就我而言,RxDataSource 太过分了,但无论如何我都会看看。
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2012-06-18
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多