2016-03-31 6 views
0

ReactiveCocoaが新しく、ボタンタップ時にフォーム入力を検証する構文を理解しようとしています。 validTextSignalのサンプルコードはかなりたくさんありますが、ほとんどはAction-enableIfにフックされているか、UIバインディングを直接処理しています。ReactiveCocoa 4 - ボタンのタップ時に入力を検証する際に助けが必要

アイデアはシンプルで、私はemailpasswordと入力してログイン画面を持っています。私が望むのは、Loginタップで検証を処理してUIAlertViewを表示することです(例えば、 "あなたのメールアドレスを入力してください")。

これは私がしばらくしてから分かったことですが、コードは機能しますが、これを行う方法であるべきかどうかはわかりません。

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 "" 
     }) 

そして、ここでは、私はそれを使用する方法です、ただ単に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) 
     } 
    } 

ボタンで値を使用しても、とにかく私たちはアクション・enableIfのfalseから中断イベントをキャプチャすることができますがありますか?

より良いアプローチの提案は、はるかに理解されるでしょう。アクションが無効になってしばらくの間、ボタンで使用

乾杯

答えて

0

は、(例えば、ログイン要求のための)要求を行います。したがって、この場合は有効な入力でない場合は無効化ボタンが必要です。

有効でない場合は、プロンプトテキストフィールドにバインドエラーテキストが表示されます。

しかし、あなたがしたい場合は、単に失敗した有効なフィールドのテキストのエラーと警告を示しますが、猫このコードを試してみてください。

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) }

関連する問題