我在一个 UIView
中有 4 个 UITextFields
,如下所示:
每个 UITextField
限制为 4 个字符。我想实现 UITextFields
之间的自动切换,每个 UITextField
的计数字符。
我使用 shouldChangeCharactersIn
作为限制字符:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let maxLength = 4
var newString = String()
let currentString: NSString = textField.text! as NSString
newString = currentString.replacingCharacters(in: range, with: string)
return newString.length <= maxLength
}
这是我的开关工具:
func textFieldDidChange(_ textField: UITextField){
let text = textField.text
if text?.utf16.count == 4 {
switch textField {
case firstPartTextField:
secondPartTextField.becomeFirstResponder()
case secondPartTextField:
thirdPartTextField.becomeFirstResponder()
case thirdPartTextField:
fourthPartTextField.becomeFirstResponder()
default:
break
}
}
}
我的问题是在删除文本时切换到之前的 UITextField
,当 UITextField
为空时我无法检测到退格键事件。
最佳答案
在 viewDidLoad() 中为 textField 添加目标
firstTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
secTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
thirdTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
fourTXt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
比创建选择器方法
func textFieldDidChange(textField: UITextField){
let text = textField.text
if text?.utf16.count == 1{
switch textField{
case firstTxt:
secTxt.becomeFirstResponder()
case secTxt:
thirdTxt.becomeFirstResponder()
case thirdTxt:
fourTXt.becomeFirstResponder()
case fourTXt:
fourTXt.resignFirstResponder()
default:
break
}
}else{
}
}
关于ios - 使用 Swift 在 UITextFields 之间自动切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912690/