如何获取 textField 文本范围直到 6 个字符?

How to get range of textField text till 6 characters?

我有一个 UITextField 用于输入个人密码。
我的要求是当 textField 字符范围达到第 6 个字符时,我必须进行服务器验证并且我必须将数据放入标签中。如果字符范围小于 5,那么我将传递 nil 值。

下面是我的代码:-

//TextField character range
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if textField == pinCode
    {
        guard let text = textField.text else { return  true }

        let newLength = text.characters.count + string.characters.count - range.length
        if(5 >= newLength)
        {
            print(newLength)
        }

        else
        {
            if newLength == 6
            {
                serverValidation()

                print(textField.text!)
                setFields(city: "Ajmer", state: "Rajasthan", country: "India")
                return newLength <= 6
            }
            else
            {
                 return newLength <= 6
            }
        }

    }

    return true
} 

我的问题是当 (newLength == 6) 时,我得到的 textField 文本只有 5 个字符。我的意思是,如果假设邮政编码是 560068,那么文本我只会得到 56006。 (但我必须在那种情况下只对 6 个字符的邮政编码进行服务器验证)

如果 (newLength == 6) 那么我怎样才能在文本字段中得到 6 个字符,然后我只能在这里进行服务器验证。

我是 swift 的新人。

谢谢

shouldChangeCharactersIn 将在 UITextField

中获取实际文本之前被调用

这就是您从 UITextField

中获取全文的方式
let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

编辑

这是您可以使用它的方式

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if textField == pinCode
    {
        guard let text = textField.text else { return  true }

        let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
        let newLength = newString.characters.count

        if(5 >= newLength)
        {
            print(newLength)
        }

        else
        {
            if newLength == 6
            {
                serverValidation()

                print(newString)
                setFields(city: "Ajmer", state: "Rajasthan", country: "India")
                return newLength <= 6
            }
            else
            {
                 return newLength <= 6
            }
        }

    }

    return true
} 

试试这个

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

if textField == pinCode
{
    guard let text = textField.text else { return  true }

    var txtAfterUpdate:NSString = textField.text! as NSString
    txtAfterUpdate = txtAfterUpdate.stringByReplacingCharactersInRange(range, withString: string)
    let txtString = txtAfterUpdate as String

    let newLength = txtString.characters.count
    if(5 >= newLength)
    {
        print(newLength)
    }

    else
    {
        if newLength == 6
        {
            print(textField.text!)
            setFields(city: "Ajmer", state: "Rajasthan", country: "India")
            return newLength <= 6
        }
        else
        {
            return newLength <= 6
        }
    }

}

return true
}

为此使用 TextField 委托方法。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

 let currentCharacterCount = textField.text?.characters.count ?? 0
            if (range.length + range.location > currentCharacterCount+1)
            {
                return false
            }

            print(currentCharacterCount)
            let newLength = currentCharacterCount + string.characters.count - range.length
            return newLength <= 6 //this will not allow you to enter more than 6 characters 

}

那个电话之后

func textFieldDidEndEditing(_ textField: UITextField)
 {
             print(textField.text!)
            setFields(city: "Ajmer", state: "Rajasthan", country: "India")
}

要调用此方法,您可以使用 view.endEditing(true) 方法。

你应该从 textfield.text.length + string.length

得到 newlength

然后从 textfield.text + string 获取文本。

您无法在调用 return 之前从 textfield.text 获取新文本。