如何获取 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
获取新文本。
我有一个 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
获取新文本。