훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-17 18:02

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[iOS] UITextFieldDelegate, DidEndOnExit, isHidden
⭐️ 개발/iOS & Swift

[iOS] UITextFieldDelegate, DidEndOnExit, isHidden

2022. 7. 8. 11:18
728x90
반응형

3일차 과제 정리

1. textField ReturnKey

func configureTextField() {
    writeTextField.placeholder = "내용을 작성해주세요"
    writeTextField.text = "루히짱!"
    writeTextField.keyboardType = .default
    writeTextField.delegate = self
 }
    
extension LEDViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
    }
}

코드를 설명하면
UITextFieldDelegate를 채택해주고,
해당 델리게이트 내에 있는 메소드인 textFieldShoudReturn을 내에
textField.resignFirstResponder()를 통해서 구현해준 것이다.

델리게이트 위임처리 부분을 쉽게 설명하자면,
writeTextField.delegate = self
텍스트필드의 대리인으로 self(즉, 여기서는 viewController)에게 권한을 준다는 걸 말한다.
" 야 뷰컨 내가 특별히 권한을 줄테니까 너가 대리인해! " 라는 바이브


그러면, textFieldShoudReturn은 무엇일까?
이걸 알기 위해서는 UITextFieldDelegate에 대해 먼저 알아보자,

UITextFieldDelegate

요놈 자식은 애플 공식문서에서 아래와 같이 설명하고 있다.
A set of optional methods to manage the editing and validation of text in a text field object.
번역하면, " 텍스트 필드 내에 있는 텍스트의 편집과 유효성을 관리하는 선택적 메소드의 집합 "이라고 한다.

그러니까, 정확히 말하자면 텍스트 필드를 관리할 수 있는 메소드가 있다는 것임

텍스트필드는 중요한 변경사항에 응답하기 위해서 이 델리게이트의 메소드를 호출한다고 한다.
- 사용자가 타이핑한 텍스트가 유효한지 체크하고,
- 키보드의 상호작용에 응답하고,
- 전반적인 편집 프로세스를 컨트롤 한다.

그리고 마지막 줄을 보자면!
텍스트 필드가 첫 번째 responder(긍까, 응답자임)가 되어서 키보드를 표시하기 직전에 편집이 시작된다.

전반적인 프로세스도 나와서 그걸 보자면,

1. textFieldShouldBeginEditing(_:) : 첫 번째 responder가 되기 전에 이 메소드가 불린다.
어떻게 사용하냐! : 텍필의 콘텐츠의 편집을 허가하거나 막는다

여기서부터 텍필이 first responder가 된 후를 말하는데
2. 시스템이 키보드를 보여주고, keyboardWillShowNotification / keyboardDidShowNotification 알림을 필요하면 post한다.
근데 이미 키보드가 보이고 있다면, 저 위 노티 대신에 시스템이 keyboardWillChangeFrameNotification and keyboardDidChangeFrameNotification 를 post 한다고 한다.

이 키보드 관련 메소드는 다음에 차차 살펴보자..ㅎㅎ

3. textFieldDidBeginEditing(_:) : 텍스트 필드가 이 메소드를 부르고 textDidBeginEditingNotification 를 post한다.

4. 이제 텍필이 편집되는 동안에 다양한 메소드를 부를 수 있는데
- text가 현재 변할 때, textField(_:shouldChangeCharactersIn:replacementString:) / textDidChangeNotification
- 텍필 내에 있는 버튼을 tap해서 텍스트를 삭제하기 위해서 textFieldShouldClear(_:)
- 키보드의 return 버튼을 tap하면 호출되는 textFieldShouldReturn(_:)

5. 첫 번째 responder에서 물러나기 전에는 textFieldShouldEndEditing(_:) 를 호출하고 이 메소드를 통해 현재 텍스트를 체크한다.

자, 여기서부터는 우리의 텍필이가 첫 번째 responder에서 물러난 시점이다.
6. 시스템이 알아서 또는 적절히 대응해서 키보드를 숨긴다. (필요에 따라서..)
키보드를 숨기면 처음 키보드가 올라왔을 때와 다르게 keyboardWillHideNotification and keyboardDidHideNotification 를 부른다.

7. 키보드도 불렀으니, 텍필도 부르겠지?
textFieldDidEndEditing(_:) method and textDidEndEditingNotification 가 불려진다.

전반적인 프로세스가 이렇다!

이 부분을 플젝하면서 알고 있었는데 새롭게 알게 된 거는 notification을 post한다는 점?
예를 들어서, textDidEndEditingNotification 이걸 통해서 내가 이해한 바로 설명하자면,
이 아이는! notification인데 옵저버에게 알림을 때리는 놈이다.
언제? -> textField의 편집 세션이 끝났을 때!

아니,, 알고 있었냐고.. 요놈들도 노티피케이션을 던지고 받는 걸 통해서 동작한다는 것을... 제법 신기방기

여하튼,
공식문서에 가면 좀 더 메소드들에 대해 디테일한 설명이 있는데 이건 그냥.. 플젝하며 익히자^^
그냥 그룹화해서 간단하게만 보며는
1. 편집을 관리하는 것
2. 텍필의 텍스트를 편집하는 것
3. 텍스트의 선택을 관리하는 것
4. Context Menu를 제공하는 것 -> beta 부분으로 나온 것 (아마 WWDC22? 에서 이번에 새롭게 설명해준 것과 관련된 거 같움)
이렇게 델리게이트 내의 메소드가 나눠진다고 함


자, 다시!!!! 과제 부분으로 돌아가자면!
textFieldShoudReturn이 뭐냐는 질문에 대해 답은 나온 것이다. 빨간색 부분을 보면 키보드 return 버튼을 눌렀을 때 호출되는 놈
이 메소드 내에서 우리가 조작대면 키보드를 내릴 수 있다는 것임!

그게 바로 textField.resignFirstResponder() 인데
이 또한 공식문서에서 자세하게 설명해주고 있다. 새삼.. 그동안 스택오버플로우나 블로그만 전전해다닌 내 자신이 멍청이같네

textFieldShouldReturn 메소드 부분에 나온 설명임

친절하게 설명하고 있는 애공문(애플공식문서),,,,
막줄을 보면, return 눌러서 내리고 싶음 -> resignFirstResponder() 써라!

이놈 자식은 파파고 써서 번역돌리면
" 알립니다 이 개체는 창에 긴급 구조 기관으로서의 지위를 포기하라는 요구를 받아 왔다. " 라는 개소리가 나온다.
.. 머라는 거..?;;
근데 하나 유심히 봐야 하는 거가,, 지위 포기!..ㅋㅋㅋ 그렇다. 지위 포기를 한다는 것임.

Bool 값을 반환하는 놈이다.
그렇기에 Bool을 반환값으로 요구하는 우리의 textFieldShouldReturn 에게서 요놈자식을 써줄 수 있다!

true를 반환하면 first responder로서의 지위를 내려놓는다는 것이고,
false는 지위 포기 못한다는 거겠지

자! 첫 번째 과제 끝!


2. DidEndOnExit

이건 진짜 처음 보는 아이다.
스보를 자주 안써서 이렇게 다채롭게 event를 줄 수 있는 걸 처음 알았는데 제법 많다..

구글링을 해보면 저 DidEndOnExit의 @IBAction을 연결하면 키보드의 return(또는 done)을 누르면
키보드가 알아서 사라지는 기능이 자동으로 추가된다고 한다.

제법 신기하쥬?

아래처럼 해줘보면 return 키를 누르는 시점에 콘솔창에 프린트문이 출력이 된다.


글구 저 다채로운 event가 정리된 거가 있어서 가져오자면,

출처 : https://susemi99.tistory.com/984



3. View isHidden 토글 형태 구현

위에 있는 view를 나는 backView라는 이름을 지어줬고,
tapGestureClicked가 동작하는 메소드 내에
backView.isHidden = !backView.isHidden을 해줬다.

이게 처음보면 참 이해가 안되는 코드이다..

글서 원리?라고 해야 하나? 내가 처음 이해 안된 시점으로 돌아가 이걸 쉽게 이해할 수 있었던 것은
토글이라고 보면 된다. 저 자체가!

이케 뷰디드로드에 우선 처음 view가 로드되었을 때 backView.isHidden를 찍어보면 false가 나온다.
숨겨지지 않은 상태!

그리고 tapGestrue~ 동작 부분에도 찍어주면
tap을 처음하는 시점에 true로 값이 바뀌는 걸 볼 수 있다.

근까,, 총합해서 다시 설명하면,
초기 false였던 backView.isHidden에게 !backView.isHidden이라는 값을 넣어주다는 거다.
그러면 false의 반대(!false)인 true가 들어가고

true인 상태에서 다시 !backView.isHidden 값을 넣어주면 false가 되어서 토글 형식으로 구현된다는 것이다

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글

[iOS] Rendering Mode, Build Phases, NavigationController, TabBarController  (0) 2022.07.11
[iOS] 1주차에 새롭게 알게 된 것들  (0) 2022.07.10
[iOS] SF Symbols, iOS 계층구조, 상속  (0) 2022.07.05
[iOS] 애플의 생태계 및 기초적인 개념  (0) 2022.07.05
[iOS] Mac Catalyst가 뭔데요?  (2) 2022.07.05
    '⭐️ 개발/iOS & Swift' 카테고리의 다른 글
    • [iOS] Rendering Mode, Build Phases, NavigationController, TabBarController
    • [iOS] 1주차에 새롭게 알게 된 것들
    • [iOS] SF Symbols, iOS 계층구조, 상속
    • [iOS] 애플의 생태계 및 기초적인 개념
    훌이
    훌이

    티스토리툴바