我有6个文本字段文本框。当用户完成输入第一个文本字段时,它应该自动进入第二个,依此类推。在这里我的代码不起作用。当我在第一个文本字段中输入值时,值将进入第二个..我的代码:
以下代码我在每个文本字段中只输入一位数。但是,我在这里如何添加文本字段响应器...一旦我完成第一个文本字段,等等......
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == self.cardTextFieldOne{
guard let text = textField.text else {return true}
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}else if textField == self.cardTextFieldTwo{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldTwo{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldThree{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldFour{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldFive{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldSix{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 1
}
else if textField == self.cardTextFieldMonth{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 2
}
else if textField == self.cardTextFieldYear{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= 2
}
return true
}
提前致谢!!
更新
if textField == self.cardTextFieldOne{
guard let text = textField.text else {return true}
let newLength = text.characters.count + string.characters.count - range.length
if (string == "") || string.characters.count < 1
{
return true //This also allow you to backspace
}else if (cardTextFieldOne.text?.characters.count)! >= 1
{
cardTextFieldOne.resignFirstResponder();
self.cardTextFieldTwo.becomeFirstResponder()
return false
}
return newLength <= 1
}
答案 0 :(得分:0)
尝试使用textField的委托方法
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == self.cardTextFieldOne{
textField.resignFirstResponder();
self.cardTextFieldTwo.becomeFirstResponder();
return false;
}else if textField == self.cardTextFieldTwo{
textField.resignFirstResponder();
self.cardTextFieldThree.becomeFirstResponder()
// if this is last field then return true
return true
}
}
答案 1 :(得分:0)
尝试手动响应,而textfield填充单个文本。
if textField == self.cardTextFieldTwo{
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
if textField.text?.utf16.count==1 { // adjust your condition here
textField.resignFirstResponder()
self.cardTextFieldTwo.becomeFirstResponder()
}
return newLength <= 1
}
请注意为所有文本字段执行此操作
答案 2 :(得分:0)
使用textFieldDidEndEditing方法,而不是在下一个textField上调用becomeFirstResponder()
func textFieldDidEndEditing(_ textField: UITextField) {
textField.becomeFirstResponder()
}
答案 3 :(得分:0)
简单解决方案
创建方法,每当您更改textField文本时调用,如下图所示,当您右键单击文本字段时,您会看到编辑更改拖动它并创建方法
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/icon_home"
android:title="Home" />
</menu>