[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來實現輸入驗證碼時自動切換到下一個輸入框這個功能