2017-01-20 11 views
0

У меня есть это условие в текстовое поле, где -Swift: Не удается удалить символы в текстовое поле с ограничением состояния на основе символов

  1. Если в раскрывающемся списке стран, я выбираю BE, то текстовое поле в той же форме, должно быть разрешено только 4 символа
  2. Если это не BE, тогда текстовое поле должно быть разрешено всего 12 символов.

Я реализовал это с помощью -

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 

Проблема:

выше реализация работает хорошо, но -

  1. Я выбираю страну, кроме BE (т.е. 12 символов разрешены в текстовом поле) и сохранять данные.
  2. Повторно открыть форму и выбрать «BE». Теперь я не могу редактировать текстовое поле вообще.

Как решить эту проблему?

Вот мой полный код -

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

     var maxLength: Int? 
     let newText = NSString(string: textField.text!).stringByReplacingCharactersInRange(range, withString: string) 

     if ((textField.textInputMode?.primaryLanguage == "emoji") || (textField.textInputMode?.primaryLanguage == nil)){ 
      return false 
     } 

     switch textField { 

     case postCodeText: 

      if (self.selectedCountryCode == "BE") { 
       maxLength = 4 
      } 

      else { 
       maxLength = 12 
      } 

      return newText.characters.count <= maxLength 


     case streetText: 
      maxLength = 40 
      return newText.characters.count <= maxLength 
     } 
    } 

EDIT 1: Добавлен экран записи recordit link demonstrating the problem

+0

Забой работает или нет на текстовое поле редактирования –

+0

В общем, да, это работает нормально ... Но когда я пытаюсь сценарий объяснил в «Проблема» раздел, backspace не работает –

ответ

0

Простое решение, что всякий раз, когда вы выбираете страну просто сохранить предыдущий текст в другую строку, если необходимо сохранить предыдущую запись, другую мудрую просто очистите textField каждый раз, когда вы выберете страну из папки Метод выбора вниз. Поскольку вы выбираете другое, чем BE, оно расширяет диапазон до 12 и вводит более 4 символов в textField, а когда вы меняете страну обратно на BE, textField уже имеет данные больше, чем диапазон BE, поэтому он не позволяет вы можете изменить текст.

Ниже всего лишь пример демонстрации

func didSelectCountryFromDropDown() { 
    self.textField.text = "" 

} 

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

  • Нет связанных вопросов^_^