iOS/UIKit
[UIKit] TextField Delegate
임구마🍠
2023. 11. 12. 17:24
어떤 함수가 실행됐는지 알 수 있음
print(#function)
대부분 extension 사용해서 구현(코드가 섞이기 때문)
extension ViewController: UITextFieldDelegate {
// 구현
}
텍스트 필드 키보드 올라오게 설정(사용자 유도)
// 최초응답자 설정(responder) (뷰마다 특성이 조금 다름) (UIResponder)
// 전체화면이 터치를 입력받을 수 있는 상태 ==> 텍스트필드가 가장 먼저 입력받는 상태
// 키보드가 올라옴 (손가락 터치로 직접 최초응답자 설정도 가능)
textField.becomeFirstResponder()
텍스트 필드에 제한을 주고 싶을 때(ex 글자 수, 숫자 제한 등등)
// 텍스트필드에 글자내용이 (한글자 한글자) 입력되거나 지워질때 호출 (허용할지 말지를 물어보는 것)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print(#function)
print("텍스트필드의 입력값: \(string)")
// 입력되고 있는 글자가 "숫자"인 경우 입력을 허용하지 않는 논리
if Int(string) != nil { // (숫자로 변환이 된다면 nil이 아닐테니)
return false
} else {
// 10글자이상 입력되는 것을 막는 코드
guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length
return newLength <= 10
}
// 10글자이상 입력되는 것을 막는 코드 (또다른 구현법)
if (textField.text?.count)! + string.count > 10 {
return false
} else {
return true
}
//return true
}
화면 터치하면 키보드 내리기
// 화면에 탭을 감지(UIResponder)하는 메서드
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
textField.resignFirstResponder()
//self.view.endEditing(true)
}
비밀번호 표시하기
textField.isSecureTextEntry.toggle()