2016-03-31 99 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錯誤的捕捉中斷的事件?

任何有關更好方法的建議都會受到很大的關注。

乾杯

回答

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