Ios 使用Swift在UITextFields之间自动切换
我在一个UIView中有4个UITextFields,如下所示: 每个UITextField限制为4个字符。我想在UITextFields之间实现一个自动切换,每个UITextField都有计数字符 我使用shouldChangeCharactersIn作为限制字符:Ios 使用Swift在UITextFields之间自动切换,ios,iphone,swift,uitextfield,uitextfielddelegate,Ios,Iphone,Swift,Uitextfield,Uitextfielddelegate,我在一个UIView中有4个UITextFields,如下所示: 每个UITextField限制为4个字符。我想在UITextFields之间实现一个自动切换,每个UITextField都有计数字符 我使用shouldChangeCharactersIn作为限制字符: func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String)
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
}
我的问题是在删除文本时切换到上一个UITextField,当UITextField为空时,我无法检测退格事件。在viewDidLoad中为textField添加目标
然后创建选择器方法
func textfield didchangetextfield: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{
}
}
创建所有文本字段的outlet集合,并按如下方式进行配置: OutletCollection:
@IBOutlet var textfields: [UITextField]!
在viewDidLoad中添加以下内容:
for (i, tf) in textfields.enumerated() {
tf.layer.cornerRadius = 5
tf.clipsToBounds = true
tf.tag = i
tf.delegate = self
}
在目标函数中,您将以以下方式限制计数:
func textFieldDidChange(textField: UITextField) {
let text = textField.text!
if text.utf16.count >= 4 {
if textField.tag < 4 {
codeTextfields[textField.tag + 1].becomeFirstResponder()
}
else {
textField.resignFirstResponder()
}
}
}
以下答案的精练版本:1 2也许你可以用它来代替自己的发明。试试这个答案,这对我来说很有效。我个人不喜欢在4个单独的文本字段中输入数字:例如,在这4个文本字段中,从我的1密码粘贴信用卡是不可能的:虽然这段代码可以回答这个问题,但前提是g关于如何和/或为什么解决问题的附加上下文将提高答案的长期值。如上所述,每个UITextField都有一个选择器,可自行调用,当文本将更改时,它将计算字符数,当满足条件时,它将更改为下一个UITextField
for (i, tf) in textfields.enumerated() {
tf.layer.cornerRadius = 5
tf.clipsToBounds = true
tf.tag = i
tf.delegate = self
}
func textFieldDidChange(textField: UITextField) {
let text = textField.text!
if text.utf16.count >= 4 {
if textField.tag < 4 {
codeTextfields[textField.tag + 1].becomeFirstResponder()
}
else {
textField.resignFirstResponder()
}
}
}
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.text = ""
}