iOS 開発では、キーボードを閉じる操作を実装する必要があることがよくあります。一般的には、ページの空白部分をクリックしてキーボードを閉じます。一般的に使用される方法は 2 つあります。
プロキシ メソッドで実装されます。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
textFiled.resignFirstResponder() //方法一
self.view.endEditing(true) //方法二
}
ただし、この方法では、多くのインターフェイス コントロールがある場合、ページ上の空白部分をクリックすることが困難になり、キーボードを非表示にすることが困難になることがよくあります。
そこで、ページのビューのタップジェスチャを監視し、ページがクリックされたときにキーボードをしまうことができるのではないかと考え、このメソッドを次のように実装します。
//注册点击事件
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(sender:))))
@objc func handleTap(sender:UITapGestureRecognizer) {
if sender.state == .ended {
textField.resignFirstResponder()
}
sender.cancelsTouchesInView =false
}
以上が一般的な実装方法ですが、RxSwift+RxCocoaを使って実装してみましょう。
//首先需要导入RxSwift和RxCocoa
import RxSwift
import RxCocoa
fileprivate let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
//添加一个点击手势
let tapBackground = UITapGestureRecognizer()
view.addGestureRecognizer(tapBackground)
tapBackground.rx.event.subscribe(onNext: { [weak self] _ in
self?.view.endEditing(true)
}).disposed(by: disposeBag)
}
CocoaPods を使用して特定の RxSwift および RxCocoa をインストールできます
platform :ios,’10.0’
use_frameworks!
target ‘项目名’ do
pod 'RxSwift', '~> 4.0'
pod 'RxCocoa', '~> 4.0'
pod 'IQKeyboardManagerSwift'
end
もちろん、サードパーティのキーボード管理ツールであるIQKeyboardManagerSwiftを使用して、キーボードの終了を処理することもできます。