시작하자마자 포커스 + 키보드 노출하기(becomeFirstResponder)
//viewDidLoad()
textField.becomeFirstResponder()
다른곳 터치시 키보드 내려가기(미노출)(touchesBegan)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true) // == textField.resignFirstResponder()
}
한글자 한글자 입력에 대한 제한 걸기(shouldChangeCharactersIn)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//이렇게 하면 안됨, 이 메소드로 하면됨.
if textField.text?.count ?? 1 <= 10 {
return true
} else {
return false
}
}
//숫자만 입력 받기
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//방법 1 이거 안됨, 지우면 에러남
if Character(string).isNumber{
return true
} else {
return false
}
// 방법 2 int안되면 false
if Int(string) != nil || string == "" {
return true
} else {
return false
}
}
버튼으로 textField 비밀번호 표시 하기 토글(isSecureTextEntry)
@objc func passwordSecureModeSetting() {
passwordTextField.isSecureTextEntry.toggle()
}
텍스트 필드(textField) 값에 따라서 버튼(Button) 활성화
//.editingChanged 값이 바뀔때마다
tf.addTarget(self, action: #selector(textFieldEditingChanged), for: .editingChanged)
tf.addTarget(self, action: #selector(textFieldEditingChanged), for: .editingChanged)
@objc func textFieldEditingChanged(textField: UITextField) {
//하나의 글자라면 벗어나기
if textField.text?.count == 1 {
if textField.text?.first == " " {
textField.text == ""
return
}
}
guard let email = emailTextField.text, !email.isEmpty,
let password = passwordTextField.text, !password.isEmpty
else {
loginButton.backgroundColor = .clear
loginButton.isEnabled = false
return
}
loginButton.backgroundColor = .red
loginButton.isEnabled = true
}
다음 텍스트필드(textField)로 포커스 넘기기
private func switchBasedNextTextField(_ textField: UITextField) {
switch textField {
case self.emailTextField:
self.passwordTextField.becomeFirstResponder()
case self.passwordTextField:
view.resignFirstResponder()
default:
print("tapped")
}
}
...
------------------------------------------------
extension ViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.switchBasedNextTextField(textField)
return true
}
return 버튼으로 포커스 넘기기
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// 빈칸이 아니면 다 넘기기
if heightLabel.text != "" && weightLabel.text != "" {
weightLabel.resignFirstResponder()
heightLabel.resignFirstResponder()
return true
} else if heightLabel.text != "" {
weightLabel.becomeFirstResponder()
return true
} else if weightLabel.text != "" {
heightLabel.becomeFirstResponder()
return true
}
return false
}