首页 > 解决方案 > 带有 RxSwift 的搜索栏取消按钮

问题描述

当点击搜索栏的取消按钮时,我想退出键盘,但当前的问题是我处理取消按钮的功能不起作用。您可以在此处查看我的代码:

searchBar.rx.cancelButtonClicked
                .asDriver(onErrorJustReturn: ())
                .drive(onNext: { [searchBar] in
                    searchBar?.searchTextField.resignFirstResponder()
                    
                    
                }).disposed(by: disposeBag)

标签: swiftiphonexcoderx-swiftrx-cocoa

解决方案


假设这是...searchBar上的实际搜索栏UISearchController

你必须打电话searchBar.resignFirstResponder(),而且对于 iOS 13 及更高版本,我发现取消按钮也不会在不打电话searchBar.showsCancelButton = false的情况下消失。

此外,我建议传递 searchBar 的弱实例,否则您的代码可能会泄漏。因此,我会这样写:

searchBar.rx
   .cancelButtonClicked
   .asDriver(onErrorJustReturn: ())
   .drive(onNext: { [weak searchBar] in
      searchBar?.resignFirstResponder()
      searchBar?.showsCancelButton = false    
   })
   .disposed(by: disposeBag)

推荐阅读