2016-03-31 13 views
0

Ich bin neu in ReactiveCocoa, und ich versuche, die Syntax für die Validierung der Formulareingabe nach dem Tippen auf die Schaltfläche herauszufinden. Es gibt eine ganze Reihe von Beispielcode für validTextSignal, aber die meisten von ihnen sind entweder in Action-enableIf eingebunden oder behandeln UI-Bindungen direkt. Die Idee ist einfach, ich habe einen Login-Bildschirm mit email und password Eingang. Was ich will, ist die Validierung auf Login tippen, um eine UIAlertView anzuzeigen (z. B. "Bitte geben Sie Ihre E-Mail").ReactiveCocoa 4 - Brauchen Sie Hilfe beim Validieren der Eingabe auf Knopfdruck

Hier ist, was ich nach einer Weile herausgefunden habe, der Code funktioniert, aber ich bin nicht sicher, ob dies der Weg sein sollte, es zu tun.

self.s_formErrorMessage <~ combineLatest(s_email.producer, s_password.producer) 
     .map({ (email, password) in 
      if adminNumber.isEmpty { 
       return "Please input admin number" 
      } else if password.isEmpty { 
       return "Please input password" 
      } 
      return "" 
     }) 

Und hier ist, wie ich es verwenden, einfach nur den Wert in Schaltfläche TouchUpInside

btn_login.rac_signalForControlEvents(.TouchUpInside).subscribeNextAs { (button: UIButton) in 
     if !self.viewModel.s_formErrorMessage.value.isEmpty { 
      self.showAlert("", message: self.viewModel.s_formErrorMessage.value) 
     } 
    } 

Auch ist es trotzdem wir Interrupted Ereignis von Aktion-enableIf falsch erfassen kann?

Jeder Vorschlag für eine bessere Herangehensweise wäre viel appreaciated.

Prost

Antwort

0

Aktion Verwendung mit Knopf für Behinderte während tun Anfrage (Anfrage Beispiel Login). In diesem Fall muss die Schaltfläche deaktiviert werden, wenn sie nicht gültig ist.

Oder Binding Fehlertext in Eingabetextfeld, wenn nicht gültig.

Aber wenn Sie nur zeigen Warnung Textfehler über fehlgeschlagene gültigen Felder wollen Katze Sie diesen Code versuchen:

btn_login.rac_signalForControlEvents(.TouchUpInside) .toSignalProducer().map { [unowned self] _ in return self.viewModel.s_formErrorMessage.value }.filter { !$0.isEmpty } .startWithNext { [unowned self] text in self.showAlert("", message: text) }