textField에서 Delegate Pattern은 유저와 커뮤니케이션 하는 용도로 쓰이며 직접적인 동작을 한다.
뷰컨트롤러에서 행위를 판단한다.
UITextFieldDelegate 프로토콜을 채택해야 한다.
textField와 뷰컨트롤러가 따로 존재하는데 textField 안에 델리게이트 속성이(대리자 속성) 있다.
textField.delegate = self
self는 뷰컨트롤러를 의미한다.
대리자는 메서드를 하나하나 채택해서 메서드를 구현한다.
델리게이트 패턴 == 대리자
어떤객체와 객체간의 의사소통(커뮤니케이션)
의사소통을 하기 위해 프로토콜을 사용
예를 들어, 유저가 아이디를 입력할 때 10글자까지만 허용한다는 상황에서
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let maxLength = 10
let currentString: NSString = (textField.text ?? "") as NSString
let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString
return newString.length <= maxLength
}
이러한 코드를 작성할 수 있다.
텍스트필드에서 항상 키보드를 나타내고 싶을 때
textField.becomeFirstResponder()
텍스트 입력 후 Done버튼을 누르면 키보드가 사라진다.
textField.resignFirstResponder()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
textField에서 기본적인 기능은 델리게이트 패턴 없이 사용할 수 있지만
고급 기능을 구현하고 싶을 때에는 델리게이트 패턴을 적용해 편리하게 사용할 수 있다.