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()