EurekaでkeyboardDismissMode = .interactiveにしてもインタラクティブにならない問題を解決する方法

開発

タグ swift eureka

事象

Swiftのフォーム生成ライブラリEurekaを使用していますが、keyboardDismissMode = .interactiveにしてもインタラクティブにならず、onDragを指定した状態になってしまう問題が発生しました。

解決方法を確認したのでメモしておきます。

scrollViewWillBeginDragging をオーバーライドする

FormViewControllerの実装を確認すると、UIScrollViewDelegateの実装の中で、キーボードのハンドリングをしていました。

extension FormViewController : UIScrollViewDelegate {

    // MARK: UIScrollViewDelegate

    open func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        guard let tableView = tableView, scrollView === tableView else { return }
        tableView.endEditing(true)
    }
}

tableView.endEditing(true)によって、キーボードを非表示にしているようです。

そのため、FormViewControllerを継承ているViewController側で、scrollViewWillBeginDraggingをオーバーライドして、keyboardDismissMode.interactiveに設定することで、キーボードをインタラクティブに非表示にすることができます。

override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 
}    

オススメ記事