一番下の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
}