TextField가 뷰의 아랫부분에 위치하게 된다면 키보드에 의해 TextField가 가려지는 현상이 일어난다.
그래서 해당 TextField를 클릭하였을 때, 키보드가 올라오면서 뷰 전체를 올려주는 작업이 필요하다.
이 방법은 생각보다 매우 간단하였다.

우선 이러한 문제가 일어나는 ViewController에 UITextFieldDelegate를 추가해준다.

class ApplyViewController: UIViewController, UITextFieldDelegate {



그 다음 Outlet을 준 TextField가 있다면 아래와 같이 코드를 추가한다. (나는 총 3개의 TextField가 있어서 3개를 추가하였다.)

tfUserName.delegate = self
tfUserEmail.delegate = self
tfUserNumber.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)




이렇게 추가를 해준 다음, 에러가 뜰 것이다.
이유는 selector로 keyboardWillShow와 keyboardWillHide 함수를 정의해주지 않아서이다.
그래서 마지막으로 아래의 코드를 추가 해준다. (viewDidLoad 밖에)

@objc func keyboardWillShow(_ sender: Notification) {
        self.view.frame.origin.y = -180
    }
    
    @objc func keyboardWillHide(_ sender: Notification) {
        self.view.frame.origin.y = 0
    }

keyboardWillHide는 원 상태로 돌아오는 것이기에 0을 적어주면 되고, WillShow는 적절하게 적어주면 된다.
참고로 마이너스 값을 적어줘야하는데, 이는 뷰를 위로 올려주기 때문이다.



추가적으로 키보드를 다시 내리고 싶을 떄, 아무 빈 공간을 터치하면 내려가는 코드도 소개하겠다.
해당 ViewController의 아무 부분에 추가해주면 된다!

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
         self.view.endEditing(true)
   }

태그:

카테고리:

업데이트: