[iOS][Swift] 키보드가 화면 가릴 때 해결 방법

Jay·2023년 8월 21일
2

iOS

목록 보기
22/47

1. Notification Center를 활용하여 키보드의 변화를 감지합니다.

키보드가 나타나거나 사라질 때 시스템에서는 특정한 알림을 보냅니다. 이 알림을 통해 키보드의 높이와 동작을 파악할 수 있습니다.

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

2. 키보드의 높이를 사용하여 입력 칸을 위로 올립니다.

keyboardWillShow와 keyboardWillHide 셀렉터를 구현하여 알림에 따른 동작을 정의합니다.

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y == 0 {
            self.view.frame.origin.y -= keyboardSize.height
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if self.view.frame.origin.y != 0 {
        self.view.frame.origin.y = 0
    }
}

3. UITapGestureRecognizer를 추가하여 화면을 탭할 때 키보드를 숨깁니다.

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)

@objc func dismissKeyboard() {
    view.endEditing(true)
}

4. 메모리 누수를 방지하기 위해 옵저버를 제거합니다.

뷰 컨트롤러가 사라질 때 Notification Center의 옵저버를 제거해주어야 합니다.

deinit {
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}

이렇게 구현하면 키보드가 나타나거나 사라질 때 화면이 자동으로 위아래로 움직이게 됩니다. 다만, 위의 방법은 전체 뷰를 위아래로 움직이는 것이므로, 스크롤 뷰나 다른 방법을 사용하여 더 세밀한 제어가 필요한 경우에는 추가적인 구현이 필요합니다.

profile
Junior Developer

1개의 댓글

comment-user-thumbnail
2023년 8월 22일

유용한 정보 잘 보고 갑니다!!

답글 달기