未分類

キーボードでtextFieldが隠れないようにする

投稿日:

画面下にtextFieldやtextViewを配置すると、キーボード出現時に隠れてしまうことがある。
キーボード出現と一緒に、textFieldの位置を上げることで解決。

キーボード出現時にtextFieldを上げる方法

UIResponderのkeyboardWillShowとkeyboardWillHideを使い、キーボード出現時とキーボードが隠れた時にviewの高さを変える。

NotificationCenterで検知する。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    
    @IBOutlet weak var textField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //デリゲート
        textField.delegate = self
        
        //キーボードが出現を検知して、行う処理を指定
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
        //キーボードが閉じたのを検知して、行う処理を指定
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
    }
    
    
    //キーボードのframeに変化がある時に呼ばれるメソッド
    @objc func keyboardWillShow(notification: NSNotification) {
        
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
            
            //キーボドが初めて出てきた時(viewが初期位置)
            if self.view.frame.origin.y == 0 {
                
                //キーボードの高さ分viewを上に移動する
                self.view.frame.origin.y -= keyboardSize.height
                
            } else {//キーボードはすでに出ている時(viewがキーボード分上がっている)
                
                //予測変換部分の高さ分viewを上に移動する
                let suggestionHeight = self.view.frame.origin.y + keyboardSize.height
                self.view.frame.origin.y -= suggestionHeight
                
            }
        }
    }
    
    //キーボードが隠れた時に呼ばれるメソッド
    @objc func keyboardWillHide() {
        //viewが初期位置でない場合、0に戻す
        if self.view.frame.origin.y != 0 {
            self.view.frame.origin.y = 0
        }
    }
    
    //return押下でキーボードを閉じる
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        self.view.endEditing(true)
        return false
    }
    
}

参考:【Swift】キーボードと一緒にViewも上げる方法

-未分類

執筆者:

関連記事

no image

ordinality(of:in:for:)で週の何日目かを求める

ordinality(of:in:for:) 指定された大きな要素内(1週間など)の小さな要素(1日など)の序数を求める。 x月x日はその週の何番目の日付になるかがわかる。 import Founda …

CocoaPodsでライブラリをインストールする手順

1.pod init 最初にPodFileを作成する。 プロジェクトが格納されている上位フォルダを右クリック→サービス→フォルダに新規ターミナル ターミナルに「pod init」を入力してEnter。 …

no image

テキストアニメ、モーションのフリーテンプレート使い方

【商用利用OK】Premiere Proのテキストアニメーション・テンプレート100種類 .mogrtのフォントがpremiere proで変更できない時の対処法

no image

UIViewの下のタッチイベントを使えるようにする方法

UIViewをのせると、その下にあるボタンやcollectionViewのタッチイベントを感知しなくなる。 UIViewのタッチイベントを透過することで、下のボタンなどが使えるようになる。 Story …

編集点を消す方法

消したい編集点にタイムラインカーソルを合わせて右クリック→スルー編集を結合