Включите кнопку в Swift, только если все текстовые поля были заполнены

Существует множество отличных библиотек для тех, кого это интересует

Там действительно, в наши дни не должно быть необходимости придумывать свои собственные спецификаторы форматирования.

13
задан Derek Mei 22 January 2016 в 07:54
поделиться

1 ответ

С Объединением (Xcode11 +, iOS13 +) это стало легче.

Первый необходимо быть в состоянии создать издателя для текстовых изменений:

extension UITextField {

    var textPublisher: AnyPublisher<String, Never> {
        NotificationCenter.default
            .publisher(for: UITextField.textDidChangeNotification, object: self)
            .compactMap { [110].object as? UITextField }
            .map { [110].text ?? "" }
            .eraseToAnyPublisher()
    }

}

Тогда можно объединить несколько издателей от нескольких текстовых полей:

private var readyToLogIn: AnyPublisher<Bool, Never> {
   return Publishers
      .CombineLatest(
         emailTextField.textPublisher, passwordTextField.textPublisher
      )
      .map { email, password in
         !email.isEmpty && !password.isEmpty
      }
      .eraseToAnyPublisher()
}

И затем изменяют Вашу кнопку isEnabled свойство на основе того объединенного Издателя

readyToLogIn
   .receive(on: RunLoop.main)
   .assign(to: \.isEnabled, on: signInButton)
0
ответ дан 1 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: