使用BehaviorRelay时,需要手动更新集合视图中的视图。你可以通过以下代码示例来解决这个问题:
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
let disposeBag = DisposeBag()
let items = BehaviorRelay<[String]>(value: [])
override func viewDidLoad() {
super.viewDidLoad()
items.asObservable()
.bind(to: tableView.rx.items(cellIdentifier: "Cell")) { row, item, cell in
cell.textLabel?.text = item
}
.disposed(by: disposeBag)
tableView.rx.itemDeleted
.subscribe(onNext: { [weak self] indexPath in
guard let strongSelf = self else { return }
var currentItems = strongSelf.items.value
currentItems.remove(at: indexPath.row)
strongSelf.items.accept(currentItems)
})
.disposed(by: disposeBag)
}
}
在这个示例中,我们创建了一个BehaviorRelay来存储字符串数组。然后,我们将BehaviorRelay作为数据源绑定到UITableView的rx.items方法上。当BehaviorRelay中的数据发生变化时,UITableView会自动更新视图。
为了处理删除操作,我们订阅了UITableView的rx.itemDeleted事件。在事件处理程序中,我们获取当前的BehaviorRelay值,并从中删除选定的行。然后,我们使用accept方法将更新后的数组发送回BehaviorRelay,以更新集合视图中的视图。
这样一来,当我们删除一个项目时,BehaviorRelay将更新集合视图中的视图。