IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定

Posted

技术标签:

【中文标题】IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定【英文标题】:Two way binding between UISearch bar text and view model property in IOS RxSwift 【发布时间】:2020-09-10 19:44:54 【问题描述】:

我有以下代码来设置绑定。

viewModel.searchTerm
            .bind(to: searchBar.rx.text)
        .disposed(by: self.disposeBag)

基本上,我正在考虑在视图模型属性“searchTerm”和 UISearchBar 的文本属性之间设置两种方式的绑定。

视图模型属性已在视图模型中定义如下:

var searchTerm = BehaviorRelay<String>(value: "")

这似乎是一种单向绑定,当用户在 UISearchBar 中输入文本时,我没有看到视图模型属性得到更新。

我应该如何修改它以设置双向绑定?

【问题讨论】:

【参考方案1】:

您拥有的代码从视图模型转到 UI 元素。您需要做的就是添加从元素到视图模型的代码。

searchBar.rx.text
    .bind(to: viewModel.searchTerm)
    .dispose(by: disposeBag)

这是因为 UI 元素在以编程方式更改时不会发出值,只有在用户更改时才会发出值。

也就是说,我不推荐双向绑定。您应该尽可能保持单向数据流。

【讨论】:

以上是关于IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定的主要内容,如果未能解决你的问题,请参考以下文章

UISearch 栏总是显示:没有结果

用于搜索屏幕的 MVVM 和 RxSwift

使用 RxSwift 进行分页 API 调用

在 tableHeaderView iOS 7 中使用 UISearchBar 访问错误

横向设备时,UISearchBar 不附加导航栏

UISearch 在 JSON api UITableView 中不起作用