본문 바로가기
iOS/UIKit

[UIKit] 화면 터치 시 키보드 내리기 (keyboard hide)

by 뚱이 2022. 1. 17.

이번 포스팅에서는 화면을 클릭했을 때 키보드가 내려가는 방법을 배워볼까 합니다.

 

우선 구현을 해봅시다!

 

여기서 touchesBegan 이라는 func은 터치가 시작되는 순간을 실행되는 func입니다.

 

터치가 되었을 때 keyboard를 강제로 내리는 설정을 해줍니다.

== view.endEditing(true)

 

여기서 endEditing은 UIView의 익스텐션에 구현되어 있는 함수인데요 정확히 말하자면 keyboard를 강제로 내리는 액션을 취하는 게 아니고  the first responder resign -> 뷰가 그려졌을 때 초기 상태로 되돌린다(?)의 의미를 담고 있습니다.

 

그러니까 내가 textfield를 클릭해서 keyboard가 올라간 거고? keyboard가 내려간 상태가 곧 초기 상태인 거죠!

 

무튼 이렇게 코드를 작성하고 시뮬레이터를 돌려보면!!

결과

짠!! 원하던 결과를 볼 수 있습니다.

 

그런데 여러 viewcontroller에서 똑같은 코드를 매번 작성하게 된다면 리소스 낭비겠죠????

 

조금 더 효율적으로 코드를 짜 봅시다!

 

우선 위의 코드를 보시면

 

UIViewController의 extension으로 hideKeyboardWhenTappedAround()라는 함수를 만들어 줬어요

그리고 해당 함수가 호출되었을 때 

1. UITapGestureRecognizer 타입의 tap 변수 설정을 해준다.

  - tap 이 되었을 때 dismissKeyboard가 호출될 수 있게 action:#selector(dismissKeyboard)를 설정해줍니다.

2. tap.cancelsTouchesInView = false

 - cancelsTouchesInView는 간단하게 설명드리자면 뷰를 터치했을 때 정보들을 전달하게 되는데 터치 정보를 중간에 커트하고 정보를 view에 안 보낼 건지 보낼 건지를 Bool 타입으로 설정하는 겁니다. 저희는 터치 정보를 view에 중간에 끊김 없이 보내야 하니까 false로 설정

3. @objc func dismissKeyboard()

 - 뷰가 터치가 될 때 위에서 설명드렸던 view.endEditing(true)를 통해서 초기 상태로 되돌려라!! 

 

이렇게 UIViewController의 extension으로 빼주게 되면 

 

위에서 봤던 ViewController 가 굉장히 단순해졌죠?

ViewController가 extension에서 정의했던 함수를 가져와서 적용만 해주면 끝!!

 

이렇게 하게 되면 코드도 깔끔해지고 여러 번 똑같은 코드를 치는 불편도 사라지겠죠???

 

 

 

궁금하신 내용 또는 틀린 내용이 있으시면 댓글 부탁드립니다 ^__^