textFieldEndEditing 과 textFieldShouldEndEditing 차이

Tabber·2021년 7월 29일
1

앱공부정리

목록 보기
1/4

오늘 앱 강의를 듣다가 TextField에 입력을 마치면 키보드가 닫히는 메서드인 textFieldEndEditingtextFieldShouldEndEditing 을 보게되었다.
근데 이 두개의 차이를 알려주기는 하는데 영어라 잘 이해를 못했다.
그래서 차이점을 다시 제대로 찾아보았다.

차이점

textFieldEndEditing(End로 부르겠음)

    // TextField 에서 편집을 중지하였을때(그러니까 입력 다 마쳤을때)
    func textFieldDidEndEditing(_ textField: UITextField) {
    // 입력이 끝났을 때 현재 입력했던것은 자연스레 지움
        searchTextField.text = ""
    }

textFieldShouldEndEditing(Should로 부르겠음)

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
        if textField.text != "" {
            return true
        } else {
            textField.placeholder = "Type something"
            return false
        }
    }

애초에 두 메서드에서 가장 큰 차이점은 Should는 Bool을 반환하고, End는 아무것도 반환하지 않는다는 것이 차이점이다. 그리고 이 반환을 통해 할수 있는 기능들이 달라진다.
먼저 End. End의 기능은
"텍스트 필드에서의 작성이 중단되면 텍스트 필드의 중단을 Delegate에게 알려준다"
단순히 입력이 중단 되었다 라는 것을 알려주는 메서드다.

반대로 Should의 기능은
"텍스트 필드에서의 작성이 중단될경우, 텍스트 필드의 편집을 중단해야 하는지 Delegate에게 물어본다"
그러니까 Should는 단순히 중단되었다고 알려주는게 아니라, 만일 빈 공간일때 어떤것을 하고, 입력되었을때 뭘 할 수 있는지를 설정할 수 있다.

약간 둘의 목적이 다르기도 하고, 기능또한 약간은 다르다. 따라서 둘 다 사용해야 올바른 기능으로 사용할 수 있다.

어쨋든 간에 모든 것들은 Delegate를 통하기 때문에, Delegate에 대해 좀 더 알아봐야 할듯 하다.

[참고 스택 오버플로우]

https://stackoverflow.com/questions/12262909/difference-between-textfieldshouldendediting-and-textfielddidendediting-in-iphon

profile
iOS 정복중인 Tabber 입니다.

0개의 댓글