Как включить кнопку после того, как пользователь заполнил все текстовые поля в Swift - PullRequest
0 голосов
/ 07 мая 2020

Я делаю приложение Swift iOS. Здесь у меня есть экран регистрации. В этом у меня есть 3 текстовых поля. Мое требование - пользователь не должен допускать двойное пространство, и если текстовое поле пусто, пользователю также следует ограничить одно пространство. Если в текстовом поле есть хотя бы один символ, пользователь может указать один пробел.

Но после того, как все 3 текстовых поля заполнены, мне нужно только включить кнопку Готово , но даже одно текстовое поле пусто, мне нужно отключить эту кнопку «Готово».

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

        let rawString = string
        let range = rawString.rangeOfCharacter(from: .whitespaces)
        if ((textField.text?.count)! == 0 && range  != nil)
            || ((textField.text?.count)! > 0 && textField.text?.last  == " " && range != nil)  {
            return false
        }

        self.doneButtonEnable()
        return true
    }

  func doneButtonEnable()  {
      if ((firstNameTextField.text!.count > 0) && (lastNameTextField.text!.count > 0) && (displayNameTextField.text!.count > 0)) {
          doneButtonAppearance(appearance: true)
          doneButton.setBackgroundImage(UIImage(named:"image_enable"), for: .normal)
      } else {
          doneButtonAppearance(appearance: false)
          doneButton.setBackgroundImage(UIImage(named:"image_disabled"), for: .normal)
      }
  }

Проблема в том, что если я ввожу один символ во все 3 текстовых поля, каждое текстовое поле с 1 символом, кнопка по-прежнему отображается отключенной, и если я ввожу 2 символа в последнем текстовом поле включается только кнопка «Готово».

Также, если я удалю весь текст в третьем текстовом поле, кнопка «Готово» должна отключаться, но в консоли отображается последний символ последнего введенного текста.

Это проблема, с которой я столкнулся.

Есть решения?

1 Ответ

1 голос
/ 07 мая 2020

Проблема в том, что вы вызываете self.doneButtonEnable() до завершения textField во время редактирования. Означает, что вы вводите символы "s" в строке c 'shouldChangeCharactersIn' в строке self.doneButtonEnable(), textField.text не добавляет 's' в свой текст. Так что просто отложите эту функцию. Попробуйте следующий код:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
     self.doneButtonEnable()
}
...