如何从用户启动和以编程方式更改set /?
UITextField
属性获取信号?通过使用text
仅在用户启动更改时报告信号。如果以编程方式设置continuousTextValues
,则不会触发信号。
我正在使用textField.text
:
continuousTextValues
如果我手动设置textField.reactive.continuousTextValues.observeValues { value in
print("Value: \(value)")
}
,则不会触发:
text
答案 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)