Toy Project/To Do List (iOS)

12. Tap Gesture Recognizer

개발자킹콩 2021. 3. 20. 19:41

 

 

이제 키보드를 내리는 작업을 할 것이다. 

키패드 부분이 아닌 영역에 클릭하게 되면 키패드가 내려오도록 구현하려 한다.

Object library를 살펴보면 “Tap Gesture Recognizer” 이 존재한다.

 

 

Tap Gesture Recognizer 는 다른 View에 붙혀서 사용가능하다.

우리는 TGR을 전체 View에 붙혀서 사용할 것이다. 

그리고 Tap을 하게 되면 이를 인지하게 되고 이를 통해 추가 코드로 부터 키패드를 내리도록 하겠다.

 

정리하면 현재 전체 View나 버튼 같은 곳이 아닌 곳을 Tap을 하게 되면 뭔가를 지정하지 않았으니깐 누른지 모른다고 생각하면 된다. 그렇다면 Tap을 했다는 것을 인지해야 하는데 이는 Tap Gesture Recognizer을 통해 Tap을 인지하게 된다.

그렇기에 전체 View에 TGR을 붙혀서 Tap Gesture 를 인지하게 되면 키패드를 내리는 동작을 구현하면 된다. 

 

 

 

 

 


 

 

 

여기서 자신이 전체 View에 추가한 것인지 TextField가 포함된 View에 포함된 것인지를 판단하고 삽입하여야 한다.

 

 

 

 

 

 


 

 

 

그리고 Tap Gesture Recognizer을 ViewController과 연결시켜서 action을 만들었다.

 

 

 

현재 Text Field에 집중이 되어서 키패드가 올라와있는 상태이다. 그렇다면 관심없는 것을 표시한다면 키패드는 내려간다.

InputTextField.resignFirstResponder() 를 호출하면 된다.

현재 가장 집중받는 First한 반응을 보여주고 있는 것을 resign. 이라는 느낌으로 받아들이자!!!

 

 

 

 

 

 


 

 

 

 

 

자 정리하자.

 

우선 Text Field 자체적으로 키패드의 설정은 가능하다. 하지만 Text Field가 포함된 View가 가려지는 현상과 키패드를 내리는 동작은 따로 지정할 필요가 있다.

그래서 우리는 Notification.default.addObserver을 통해 올라오는 키패드를 관찰했다. 

 

여기서 키패드가 올라오거나 내려갈 경우 adjustInputView를 호출하게 된다.

들어오는 인자는 키패드가 올라갔는지 내려갔는지 위치, 길이 등 다양한 정도를 관찰한 데이터가 저장되어있다.

해당 데이터를 기반으로 TextField 가 포함되어 있는 View의 Bottom의 constraint를 변경시켜서 높이를 조절하였다.

여기서 SafeArea라는 개념을 배웠는데 최근의 애플제품은 시계, 배터리, 밑이 부분 등 건들이면 안되는부분을 제외한 안전한 부분이 존재하는데 observer의 경우 움직이는 좌표점으로 판단하기에 이 영역만큼의 길이가 포함되어있어서 올리는 bottom의 길이에서 이를 빼줘야한다.

 

그리고 키패드를 내리는 작업이 존재한다.

키패드와 TextField를 제외한 부분을 눌렀을때 키패드를 내리고 싶은데 현재 그러한 부분이 눌렸다는 것을 인지하는 것이 존재하지 않는다. 그래서 Tap Gesture Recognizer 를 object Library를 전체 View에 삽입하였다.

그리고 TGR을 ViewController과 연결하여 inputTextField.resignFirstResponder()을 호출하였다.

이는 현재 First하게 응답하는 것이 TextField 였기에 집중이 되어있는 상태를 resign한다는 기능이며, TextField가 우선순위에서 내려가는 기능이라고 생각하면 이해하기 쉬울 것이다.

 

 

 

 

 

 

'Toy Project > To Do List (iOS)' 카테고리의 다른 글

14. Closure Logic Implement  (0) 2021.04.09
13. AddButtonTapped  (0) 2021.03.31
11. Keyboard  (0) 2021.03.14
10. input text View 만들기  (0) 2021.03.12
9. Storage 구현  (0) 2021.03.09