2016-12-21 3 views
1

У меня есть UITextField для ввода номера pincode.
Мое требование - когда диапазон символов textField достигает 6-го символа, тогда я должен выполнить проверку сервера, и я должен поместить данные в метки. Если диапазон символов меньше 5, я передам значение nil.Как получить диапазон текста TextField до 6 символов?

Ниже мой код: -

//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 символов в текстовом поле, а затем я могу выполнить проверку сервера здесь только.

Я новый в быстром.

Благодаря

+1

Это до того, как новый символ добавлен в строку текстового поля, ваш полный текст должен быть 'textField.text' +' string', если im не ошибочно – Tj3n

+0

Хорошо, позвольте мне проверить. Я дам вам знать. Спасибо – kishor0011

ответ

2

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 
} 
+1

Его сделали Спасибо :-) – kishor0011

+0

Отредактировано мое подтверждение ответа – Rajat

+1

Огромное вам спасибо :-) Сохраните мой день. – kishor0011

0

Попробуйте

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 
} 
+0

Я попробовал. Он дает тот же результат.Я имею в виду 5 символов, только если (newLength == 6) Спасибо – kishor0011

0

Использование 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) метод.

1

Вы должны получить newlength от textfield.text.length + string.length

затем получить текст из textfield.text + string.

Вы не можете получить новый текст от textfield.text перед вызовом return true.

+0

Для новой длины вы имеете в виду, что мне нужно сделать вот так: - let newLength = textField.text.length + string.length – kishor0011

+0

Да. Оно работает? Я работаю над Objective C, поэтому я не могу перевести его в Swift. – Hezron

Смежные вопросы