ios swift 에서 키패드/키보드 닫기/숨기기 또는 키패드에 input Field가 가려졌을때 처리

그리고 카톡 입력할때처럼 input Field가 키패드 위에 딱 붙어서 동작하는 경우에 대해서 알아보자~~

이것만 보면 swift에서 키패드 관련된 대부분의 처리를 다 할 수 있지 않을까 생각된다.

도움되었으면 공감이라도~~

1. inputText 입력시 배경을 터치하면 키패드가 내려가게 코딩

  1. Tab Gesture 사용

        - 라이브러리에서 Tap Gesture Recognizer 를 선택하여 화면의 뷰로 드래그&드롭 한다.

- 우클릭후 아이콘을 소스로 드래그&드롭한후 Action을 추가한다.

- type : UITapGestureRecognizer  로 설정한다.

- Action 코드에 키패드 내리는 코드를 추가한다.

  ex)

  


 @IBAction func tapBackground(_ sender: UITapGestureRecognizer) {      

               self.view.endEditing(true)   // 키패드 닫힘

       //        self.inputField.resignFirstResponder()  // inputField 컨트롤에서 사용시 키패드 닫힘

       //        self.inputField.endEditing(true) //  inputField 컨트롤에서 사용시 키패드 닫힘

   }


  1. touchesBegan 메서드를 override 하여 사용

ex)


   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

       self.view.endEditing(true)

   }


  1. UITapGestureRecognizer 를 코딩으로 구현

ex)


   override func viewDidLoad() {

       super.viewDidLoad()

       let tapGesture = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))

       tapGesture.cancelsTouchesInView = true

       self.view.addGestureRecognizer(tapGesture)

   }


   @objc func hideKeyboard() { // 배경 터치시 키보드 내리기

       self.view.endEditing(true)

   }


2. 키패드에 의해서 input Text 가 가려서 안보일 경우

  1. 키패드에 가려진 input Text 보이게하기

ex)

--------------------------------------------------------------------------------------------------

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: .UIKeyboardWillShow, object: nil)

       

       NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: .UIKeyboardWillHide, object: nil)

   

       

   }

   func textFieldShouldReturn(_ textField: UITextField) -> Bool {

       textField.resignFirstResponder()

       return true

   }

   func keyboardWillShow(_ sender: Notification) {

       self.view.frame.origin.y = -150 // Move view 150 points upward

   }

   func keyboardWillHide(_ sender: Notification) {

       self.view.frame.origin.y = 0 // Move view to original position

   }

--------------------------------------------------------------------------------------------------

출처: https://zeddios.tistory.com/127 [ZeddiOS]


  1. input Text를 키보드 위에 붙여서 사용하기


- text field 와 button을 view 안에 넣고, view의 바닥 높이를 조절하는 방식으로 한다.

- 키패드가 올라오고 내려오는 애니메이션 속도를 맞추어 동일하게 한다.

- 바닥 높이 조절을 위해 constraints 를 이용한다.

- @IBOutlet weak var inputViewBottomMargin: NSLayoutConstraint!

- inputViewBottomMargin.constant 값을 설정하여 높이를 조절한다.

- 키패드의 높이는 실제 키패드의 높이 - 세이프에어리어의 바닥높이 이다.

- NotificationCenter 에 옵저버를 추가하여 키패드가 올라올때, 키패드가 내려올때 동작하는 함수를 설정한다.


class ViewController: UIViewController {

   @IBOutlet weak var inputViewBottomMargin: NSLayoutConstraint!


   override func viewDidLoad() {

       super.viewDidLoad()

       

       // 키보드 관련 옵저버 설정을 해야함.

       // 키보드 올라올때

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

       // 키보드 내려올때

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

   }


   // 키보드 보이기

   @objc func keyboardWillShow(noti: Notification){

       let notiInfo = noti.userInfo!

       //키보드 높이 가져오기 위해

       let keyboardFrame = notiInfo[UIResponder.keyboardFrameEndUserInfoKey] as! CGRect

       let height = keyboardFrame.size.height - self.view.safeAreaInsets.bottom

       inputViewBottomMargin.constant = height

       let animationDuration = notiInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval

       

       // 애니메이션 효과를 키보드 애니메이션 시간과 동일하게

       UIView.animate(withDuration: animationDuration) {

           self.inputViewBottomMargin.constant = height

           self.view.layoutIfNeeded()

       }

   }


   // 키보드 숨기기

   @objc func keyboardWillHide(noti: Notification){

       let notiInfo = noti.userInfo!

       let animationDuration = notiInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as! TimeInterval

       

       // 애니메이션 효과를 키보드 애니메이션 시간과 동일하게

       UIView.animate(withDuration: animationDuration) {

           self.inputViewBottomMargin.constant = 0

           self.view.layoutIfNeeded()

       }

   }


   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

       self.view.endEditing(true)

   }


}


+ Recent posts