Scenario: I have 4 UITextFields that only accept 1 character. Easy.
Problem: After I enter the 1 character, I want the next TextField to become active automatically with
Swift 4.x
textField.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: .editingChanged)
@objc func textFieldDidChange(textField: UITextField)
{
let text = textField.text
if text?.utf16.count == 1 {
switch textField {
case txtOtpNumber1:
txtOtpNumber2.becomeFirstResponder()
case txtOtpNumber2:
txtOtpNumber3.becomeFirstResponder()
case txtOtpNumber3:
txtOtpNumber4.becomeFirstResponder()
case txtOtpNumber4:
txtOtpNumber4.resignFirstResponder()
default:
break
}
} else {
switch textField {
case txtOtpNumber4:
txtOtpNumber3.becomeFirstResponder()
case txtOtpNumber3:
txtOtpNumber2.becomeFirstResponder()
case txtOtpNumber2:
txtOtpNumber1.becomeFirstResponder()
case txtOtpNumber1:
txtOtpNumber1.resignFirstResponder()
default:
break
}
}
}
PS. Chetan's answer updated for the current Swift.