我将CocoaAction添加到按钮,如
var speakBtn = UIBarButtonItem(title: "Speak", style: .done, target: self, action: nil)
speakBtn.rx.action = viewModel.speakAction
之后,有一个textView的文本要绑定到它,比如
if let speakBtn = navigationItem.rightBarButtonItems?.first {
textValid.bindTo(speakBtn.rx.isEnabled)
.addDisposableTo(disposeBag)
}
然后,结果是错误的。如果我评论将cocoaAction添加到按钮的代码,当应用程序运行时,textView的文本为nil,因此speakBtn将无法单击。
但现在,speakBtn可以点击。
任何人都可以给我解释一下吗?感谢。
答案 0 :(得分:0)
我刚刚找到了解决方案。
我不应该使用该方法来初始化speakAction:
action: Action<String, Bool> = Action(workFactory: { input in
return networkLibrary.checkEmailExists(input)
})
我应该使用该方法初始化speakAction:
action: Action<String, Bool> = Action(enabledIf: validEmailAddress, workFactory: { input in
return networkLibrary.checkEmailExists(input)
})
所以,正确的代码应该是:
let textValid = textView.rx.text.orEmpty
.map{ $0.characters.count > 0 }
.shareReplay(1)
viewModel.speakAction = CocoaAction(enabledIf: textValid, workFactory: { Void -> Observable<Void> in
return Observable.create { observer in
observer.onCompleted()
return Disposables.create()
}
})
textValid.bindTo(hintLabel.rx.isHidden)
.addDisposableTo(disposeBag)
textValid.bindTo(speakBtn.rx.isEnabled)
.addDisposableTo(disposeBag)
speakBtn.rx.action = viewModel.speakAction