每当ReactiveCocoa 5中的UITextField文本属性发生更改时,如何获取信号

时间:2017-01-05 15:40:20

标签: swift uitextfield reactive-cocoa reactive-cocoa-5 reactive-swift

如何从用户启动和以编程方式更改set /? UITextField属性获取信号?通过使用text仅在用户启动更改时报告信号。如果以编程方式设置continuousTextValues,则不会触发信号。

我正在使用textField.text

continuousTextValues

如果我手动设置textField.reactive.continuousTextValues.observeValues { value in print("Value: \(value)") } ,则不会触发:

text

5 个答案:

答案 0 :(得分:5)

只有在用户使用键盘输入时才会触发信号continuousTextValues。您可以试试这个:

var characters = MutableProperty("")

tf.reactive.text <~ characters
tf.reactive.continuousTextValues.observeValues { [weak characters = characters] (text) in
   characters?.value = text!
}
tf.reactive.textValues.observeValues { [weak characters = characters] (text) in
   characters?.value = text!
}

characters.producer.skip(while: { $0.isEmpty }).startWithValues { (text) in
   log.debug("text = \(text)")
}

characters.value = "shaw"

答案 1 :(得分:1)

您必须创建一个信号,将其绑定到文本字段并修改信号的值,而不是使用Node::Node(int order) { // ... } 更改文本值。我使用了textField.text管道,但如果您需要存储以编程方式更改的值,则可以使用Signal

MutableProperty

答案 2 :(得分:0)

收听文字属性中的程序化更改:

let textField = UITextField()
let signal = textField.reactive.signal(forKeyPath: #keyPath(UITextField.text)).map { $0 as? String }
signal.observeValues { print($0) }
textField.text = "Hello World"

请注意,如果您想观察由于用户操作引起的更改,您仍需要观察continuousTextValues

答案 3 :(得分:0)

您可以使用 rac_textSignal 属性收听textField。

[self.someTextField.rac_textSignal subscribeNext:^(NSString* text) {       
     NSLog(@"%@", text); 
}];

每次textField文本更改时,都会调用此闭包。

答案 4 :(得分:0)

设置文本后,触发编辑事件:textField.sendActions(for: .editingChanged)