gpt4 book ai didi

ios - 在 UITextfield 上订阅(控制事件,编辑已更改)

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

我想在触发 UIControlEvent Editing Changed 后使用 RxSwift 从 UITextField 获取文本。

为了做到这一点:

我像那样将 Storyboard中的文本字段导出连接到我的 View Controller 。

@IBOutlet weak var currentPasswordTextField: UITextField!

然后在这个文本字段的 didSet 属性上我尝试了这个:

@IBOutlet weak var currentPasswordTextField: UITextField!{
didSet{
currentPasswordTextField
.rx
.controlEvent(.editingChanged)
.asObservable()
.subscribe(onNext: { (text) in
//I want here to print the text after the editing changed.
print(text)
})
.disposed(by: disposeBag)
}
}

但文本是 Void 而不是字符串..

如果有人能帮忙,我将不胜感激。提前致谢。

附言我不想使用 IBActions。

最佳答案

几点:

  • asObservable() 是不必要的。
  • 您可以直接订阅 .rx.text.orEmpty,但是您会在文本字段开始和结束编辑时收到事件。

给你:

@IBOutlet weak var currentPasswordTextField: UITextField!{
didSet{
currentPasswordTextField
.rx
.controlEvent(.editingChanged)
.withLatestFrom(currentPasswordTextField.rx.text.orEmpty)
.subscribe(onNext: { (text) in
//I want here to print the text after the editing changed.
print(text)
})
.disposed(by: disposeBag)
}
}

我昨晚想到的其他事情......

将这段代码放在didSet中会出问题。 Rx 代码倾向于以输出为中心,而不是以输入为中心。因此,subscribe 中发生的任何事情都可能会引用一些其他也必须存在的对象,并且您可能希望也能够引用其他可观察对象。

以输入为中心与以输出为中心是什么意思?

命令式代码往往以输入为中心,当您想知道点击按钮时会发生什么时,您通常可以查看一个地方,即按钮的操作。但是,如果您想了解影响特定标签、事件指示器或任何其他输出的所有内容,则必须查看所有代码。 View Controller 中的每个函数都可以将信息推送到输出,其中有几个可能是。

声明性代码往往以输出为中心,当您想了解影响标签输出的所有内容,或者是什么导致事件指示器显示/隐藏时,通常可以在一个地方查看。但是,如果您想了解点击按钮所做的一切,则必须通读所有代码才能搞清楚。 (一个完美的例子是电子表格,如果你想知道特定单元格的输出是如何定义的,你只需要查看那个单元格中的公式,但如果你想知道受特定细胞影响的所有细胞,这是一种痛苦。)

根据我的经验,以上是程序员在使用 Rx 时最难思考的事情。

关于ios - 在 UITextfield 上订阅(控制事件,编辑已更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894838/

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