一番下のUITextFieldをキーボードで隠れないようにする
LINEのように、コメントを書き込む一番下のUITextFieldを、キーボード表示で隠れないようにする、簡単なやり方のメモ。
UIScrollViewの上にUITextFieldを配置してスクロールさせるサンプルはネットに散見されるけど、UIToolbarを使ったもっとシンプルなやり方がある。
ポイントは、
1、UIToolbarを使いその上にUITextFieldを配置する。
2、view.transformでキーボード分ずらす。
ソースコードは下記。
var myToolbar: UIToolbar! var myTextField: UITextField! override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) // ツールバーの追加 self.view.backgroundColor = UIColor.cyanColor() myToolbar = UIToolbar(frame: CGRectMake(0, self.view.frame.height - 44, self.view.frame.width, 44.0)) myToolbar.barStyle = UIBarStyle.BlackTranslucent myToolbar.tintColor = UIColor.whiteColor() myToolbar.backgroundColor = UIColor.blackColor() self.view.addSubview(myToolbar) // UITextFieldを作成する. myTextField = UITextField(frame: CGRectMake(0,0 ,self.view.frame.width, 44)) // 表示する文字を代入する. myTextField.placeholder = "コメントを書き込んでください" myTextField.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center // 枠を表示する. myTextField.borderStyle = UITextBorderStyle.RoundedRect // Delegateを設定する. myTextField.delegate = self // ツールバーに追加する. myToolbar.addSubview(self.myTextField) // 通知設定 let notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.addObserver(self, selector: "handleKeyboardWillShowNotification:", name: UIKeyboardWillShowNotification, object: nil) notificationCenter.addObserver(self, selector: "handleKeyboardWillHideNotification:", name: UIKeyboardWillHideNotification, object: nil) } // UITextFieldをクリックした時。キーボードが出てくるので、その分だけずらす func handleKeyboardWillShowNotification(notification: NSNotification) { let userInfo = notification.userInfo! let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() let transform = CGAffineTransformMakeTranslation(0, -keyboardScreenEndFrame.size.height); self.view.transform = transform } // UITextFieldでエンターを押した時。キーボードが消えるので、その分だけずらす func handleKeyboardWillHideNotification(notification: NSNotification) { self.view.transform = CGAffineTransformIdentity } // UITextFieldでリターンを押した時にキーボードを閉じる func textFieldShouldReturn(textField: UITextField) -> Bool { textField.resignFirstResponder() return true }