textfield auto focus无法正常工作

时间:2017-07-28 09:11:47

标签: ios swift uitextfield

我有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




        }

4 个答案:

答案 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文本时调用,如下图所示,当您右键单击文本字段时,您会看到编辑更改拖动它并创建方法   enter image description here

<?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>