我正在将 RxSwift 与 RxRealm 和 RxRealmDataSources 一起使用。我的 Realm 对象绑定(bind)到 TableView 。我正在尝试找到一种根据在搜索栏中输入的查询来过滤它的方法。你们有人做过这样的事吗?
class ItemsViewController: UITableViewController {
let bag = DisposeBag()
let searchController = UISearchController(searchResultsController: nil)
let search = BehaviorSubject(value: "")
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
bindTableView()
}
func bindTableView() {
let dataSource = RxTableViewRealmDataSource<Item>(cellIdentifier: "itemCell", cellType: UITableViewCell.self) { cell, ip, item in
cell.textLabel?.text = item.uuid
}
Observable.changeset(from: DataStore.sharedInstance.getObjects(Item.self))
.bind(to: tableView.rx.realmChanges(dataSource))
.addDisposableTo(bag)
}
}
extension ItemsViewController: UISearchResultsUpdating {
public func updateSearchResults(for searchController: UISearchController) {
search.onNext(searchController.searchBar.text ?? "")
}
}
最佳答案
最简单的方法是:
func bindTableView() {
let dataSource = RxTableViewRealmDataSource<Item>(cellIdentifier: "itemCell", cellType: UITableViewCell.self) { cell, ip, item in
cell.textLabel?.text = item.uuid
}
search.asObservable()
.map { text in DataStore.sharedInstance.getObjects(Item.self).filter("someProperty == %@", text) }
.flatMap { results in Observable.changeset(from: results) }
.bind(to: tableView.rx.realmChanges(dataSource))
.addDisposableTo(bag)
}
关于ios - 如何使用 RxSwift、RxRealmDataSources 和 UISearchController 过滤结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338515/