gpt4 book ai didi

ios - UITextField 的 bindTo rx_text 没有触发 UITextField 的发射事件

转载 作者:搜寻专家 更新时间:2023-11-01 07:21:37 26 4
gpt4 key购买 nike

我是学习 RxSwift 的新手。

我修改了 RxSwift Example App 中的 Simple Numbers 示例,它将三个数字添加到一个结果数字中。

我添加了一个 testStr UITextField 和一个 upperCase UILabel。我将 testStr 映射到大写并将 bindTo 映射到 upperCase 标签,这很好。我还将 testStr 映射到它的 length,并将 bindTo 映射到 num1 字段。奇怪的事情发生了,虽然num1字段的内容发生了变化,但它并没有发出任何事件,所以对result标签没有任何影响。即使我在另一个数字字段中输入了一些数字,result 数字也不计入 num1

我是否错误地使用了 bindTo?我可以用什么方式让 num1 发出事件?

谢谢!!!

@IBOutlet weak var num1: UITextField!
@IBOutlet weak var num2: UITextField!
@IBOutlet weak var num3: UITextField!
@IBOutlet weak var result: UILabel!

@IBOutlet weak var testStr: UITextField!
@IBOutlet weak var upperCase: UILabel!

let disposeBag = DisposeBag()

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view, typically from a nib.
Observable.combineLatest(num1.rx_text, num2.rx_text, num3.rx_text) {
(textval1, textval2, textval3) -> Int in
return (Int(textval1) ?? 0) + (Int(textval2) ?? 0) + (Int(textval3) ?? 0)
}
.map{$0.description}
.bindTo(result.rx_text)
.addDisposableTo(disposeBag)

let obStr = testStr.rx_text

obStr
.map {$0.uppercaseString}
.bindTo(upperCase.rx_text)
.addDisposableTo(disposeBag)

obStr
.map{ $0.characters.count }
.map{ $0.description }
.bindTo(num1.rx_text)
.addDisposableTo(disposeBag)
}

最佳答案

您需要使用 Subject ,例如 Variable 来存储值。您可以在 this answer in the section called Using Variables 中看到这样的示例.

它不起作用的原因是因为 rx_text 只会在用户更改时省略下一个元素,不会以编程方式(如您所做的那样)。这是因为 rx_text 实际上是使用 UIControl 中的这个方法来获取字段更改的通知:

public class UIControl : UIView {
public func addTarget(target: AnyObject?, action: Selector, forControlEvents controlEvents: UIControlEvents)
}

但是,当更改以编程方式发生时,该方法不会调用 target 上的 action 方法。 由于用户更改某些内容而发生时。

因此,如果您要以编程方式更改该字段,然后用户要进入(或离开)该字段,您应该会看到下一个事件。然而,这不是您想要的。

相反,请引用我链接到的那个答案,它会起作用。

关于ios - UITextField 的 bindTo rx_text 没有触发 UITextField 的发射事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38650044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com