[Swift]輸入驗證碼自動切到下一個輸入框

我們需要先設定textField的tag,有個就依序(1,2,3,4,5…)

之後viewController要實現textField的delegate
並在下列的方法內加入以下程式碼

extension ViewController:UITextFieldDelegate{
//此function回傳true的話textField就可以繼續輸入false的話該textField就不能再輸入
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        // 當輸入的字不為空字串時
        if (string != "") {
                //當textField不為空字串時
                if (textField.text == "") {
                    textField.text = string
                    //建立一個響應者為目前textField tag的下一個
                    let nextResponder: UIResponder? = view.viewWithTag(textField.tag + 1)
                    //只要響應者不是nil就讓他成為第一位響應者這樣就可以連續輸入時自動切到下一格
                    if (nextResponder != nil) {
                        nextResponder?.becomeFirstResponder()
                    }else{
                    //當tag到最後時響應者會是nil此時執行將鍵盤收起的function
                        self.view.endEditing(true)
                    }
                }
                return false
            } else {//當我們按下刪除鍵時相當於輸入空字串
    
                textField.text = string
                //建立一個tag往前的響應者
                let nextResponder: UIResponder? = view.viewWithTag(textField.tag - 1)
                if (nextResponder != nil) {
                //只要響應者不是nil就讓他成為第一位響應者這樣就可以連續輸入時自動切到上一格
                    nextResponder?.becomeFirstResponder()
                }
                return false
            }
    }
}

記得要設定textField的delegate


private func setupTextFieldDelegate(){
        firstTextField.delegate = self
        secondTextField.delegate = self
        thirdTextField.delegate = self
        fourthTextField.delegate = self
        fifthTextField.delegate = self
        sixthTextField.delegate = self
    }

我們利用UIResponder來實現輸入驗證碼時自動切換到下一個輸入框這個功能