みなさん、こんにちは。アプリ道場の蒲池です。
今回はテキストフィールドなどが入力状態になった時に表示される「キーボードを引っ込めるボタン」を追加する方法について、勉強したことを書いてみます。
テキストフィールドに入力する際に表示されるキーボードを引っ込めるタイミングは、
- 他の画面(テキストフィールドの外)がタップされた時
- キーボードにある「return」が押された時
などがありますが、Doneボタンを作ってキーボードに乗せて表示させておいて、入力が終わってそのDoneボタンを押したら、キーボードが引っ込む、そういうやり方が安定していて好きなのです。
キードードに初めから備わっていない「Doneボタン」を追加してやって、それを押した時に、引っこませようとするわけです。
ツールバー(ボタンビュー)部分を作成する
色は分かりやすくするためgreenColorにしましたが、実際は、lightGrayColorなどが良いと思います。
// Doneボタンの乗るボタンビュー buttonViewForKeyboard を作成します。
そのビューの位置・サイズは、frame: CGRectMake(0, 0, 320, 40)で設定すれば、乗せるキーボードの端から、この場合は、幅320高さ40です。
let buttonViewForKeyboard = UIView(frame: CGRectMake(0, 0, 320, 40))
buttonViewForKeyboard.backgroundColor = UIColor.greenColor()
Doneボタンを作成します。
「Done」の位置は、ビューの右側。幅80、高さ30です。
let myButton = UIButton(frame: CGRectMake((self.view.bounds.size.width
- 80), 5, 80, 30))
myButton.backgroundColor = UIColor.greenColor()
myButton.setTitle("Done", forState: UIControlState.Normal)
Doneボタンが押された時のメソッドを指定する
myButton.addTarget(self, action: "onMyButton", forControlEvents:
UIControlEvents.TouchUpInside)
ボタンの乗ったボタンビューをKeyboardのビューに追加 add する
buttonViewForKeyboard.addSubview(myButton)
ボタンの乗ったビューたる buttonViewForKeyboard をフィールドに設定
いくつTextFieldを作っても、全部、このようにbuttonViewForKeyboardを設定すれば良いようです。inputAccessoryView のおかげで、どのデバイスでもうまく収まるようです。
firstTextField.inputAccessoryView = buttonViewForKeyboard
secondTextField.inputAccessoryView = buttonViewForKeyboard
andSoOnTextField.inputAccessoryView = buttonViewForKeyboard
Doneボタンを押した時呼ばれるメソッド。
その名前が、onMyButton。
つまり、これが、キーボードを引っ込める命令。
func onMyButton(){
self.view.endEditing(true)
}
僕のアプリはこの機能が頻繁に発生するので、定番化しています。