시작하자마자 포커스 + 키보드 노출하기(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
    }