未分類

キーボードで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

FSCalendarカスタマイズのメモ

5週か6週で行数を変える //5週か6週で行数を変える calendar.placeholderType = .fillHeadTail 該当月が5週なのに、6行表示されるのを防ぐ。 .noneにする …

no image

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

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

ガイドの線(セーフマージン)を表示させる方法

画面右クリック→セーフマージンにチェック

no image

systemImageを使ってボタンをカスタマイズする

標準で用意されているsystemImageを使って、以下のような追加ボタンを作る。 StoryBoardでImageに「plus」を設定して、テキストは消す。 systemImageのサイズ、色はコー …

no image

String型からDate型への変換

String型の「2020/08/10」をDate型に変換したい。 import Foundation let dateFormatter = DateFormatter() dateFormatte …