TKKeyboardControlとは
キーボードの上部から指でスーッと下に降ろすことでキーボードを閉じることができる機能を簡単に追加できるOSSです。
よく見かけるのは、FacebookのMessengerやAppleのメッセージアプリですね。
TKKeyboardControlを使うと、そういったメッセージ系のアプリを作る際には、ぜひ実現したい機能の一つである、
スワイプ(PanGesture)で標準キーボードを閉じれるようにすること
が簡単に実現できるようになっています。
使い方
追加するソースコードはたったの4行なので、とても簡単に導入できます。
1. 導入する
CocoaPodsかマニュアルで導入することができます。
1-a. CocoaPodsで導入する
以下の内容でPodfileを作成し、pod install します。
Swiftからは**use_frameworks!**が無いとエラーになりますので、ご注意を。
platform :ios, '8.0'
use_frameworks!
pod 'TKKeyboardControl'
1-b. マニュアルで導入する
下記リンクからソースコードをダウンロードし、中身のTKKeyboardControlディレクトリをプロジェクトに追加してください
https://github.com/cztatsumi-keisuke/TKKeyboardControl/archive/master.zip
2. 動きを追加したいViewControllerにインポートする
動きを追加したいViewControllerに下記のコードでインポートします。
import TKKeyboardControl
3. PanGestureの動きをキーボードに付与する
ViewControllerのviewDidLoad()に下記コードを追加します。
これでキーボードをスワイプで閉じれるようになります。
self.view.addKeyboardPanningWithFrameBasedActionHandler({ (keyboardFrameInView, opening, closing) in
// ここはPanGestureが変化するたびに呼ばれます
}, constraintBasedActionHandler: nil)
4. deinitにObserverを解放するためのメソッドを追加
最後に、deinitに下記コードを追加して完成です。
self.view.removeKeyboardControl()
PanGestureが効く始点を変更する
メッセージ系のアプリにおいて、キーボードの上部にはサンプルのようなテキストボックスを実装することがほとんどです。
その場合、keyboardTriggerOffsetプロパティを設定して、PanGestureが効く始点をテキストボックスの上部からに変更します。
// テキストボックスの高さ
let inputBaseViewHeight: CGFloat = 40
// PanGestureが効く始点をテキストボックスの上部からに設定
self.view.keyboardTriggerOffset = inputBaseViewHeight
self.view.addKeyboardPanningWithFrameBasedActionHandler({ (keyboardFrameInView, opening, closing) in
// キーボードの伸縮に合わせてテキストボックスのY座標が変化するようにする
self.inputBaseView.frame.origin.y = keyboardFrameInView.origin.y - inputBaseViewHeight
}, constraintBasedActionHandler: nil)
マニュアルでキーボードを閉じる
マニュアルでキーボードを閉じたい場合は、下記のメソッドを使います。
self.view.hideKeyboard()