0

我是响应式编程的新手,特别是 Bond 框架。我知道我对这种编程技术的基本理解可能做错了。这是这种情况:

我有一个UITextView和一个“批准” UIButton。我希望仅当 textView 中的文本不为零时才启用批准按钮。我已经尝试将这些代码行添加到我viewDidLoadViewController.

    textView.reactive.text.observeNext{(text) in
        self.message = text
        print(text)
    }
    textView.reactive.text.map { $0 != nil}.bind(to: approveButtonOutlet.reactive.isEnabled)

第一个动作有效(在每次输入更改时都会成功打印文本)。第二个不起作用,当文本不是 nil 和它是时,按钮都会启用。

任何帮助表示赞赏。

4

2 回答 2

1

你可以试试

 RAC(self.approveButtonOutlet, enabled) = [self.textView.rac_textSignal map:^id(NSString *text) {
      return @(text.length > 0);
    }];

我不确定在 swift 3 中会怎样

RAC(self.approveButtonOutlet, enabled) = self.textView.rac_textSignal.map({(text: String) -> void in
    return (text.length > 0)
})
于 2017-08-22T09:15:14.293 回答
0

我发现问题是我的 textView 中有一个占位符,它阻止了文本真的为零。所以最终我做的是:

    textView.reactive.text.map {
        if $0 == placeholder {
            return false
        } else if $0 != nil {
            return $0!.characters.count > 0
        } else{
            return false
        }
        }.bind(to: approveButtonOutlet.reactive.isEnabled)
于 2017-08-22T10:40:52.687 回答