我有两个文本框。当第一个文本字段被点击时,我想打开一个底部页。另一个textfield定期接受用户输入。
当produklistrikDropdown
文本字段带有edittingDidBegin
时,这就是我的触发器。
produkListrikDropDown.rx.controlEvent(.editingDidBegin)
.subscribe(onNext:{
self.dismissKeyboard()
print("produk Listrik Field did begin")
self.viewModel.showProdukListrik()
})
.disposed(by: disposeBag)
在我从底片中选择一个产品后,它只需将字段的文本更改为我所选择的文本。
viewModel.currentProdukListBehaviorSubject
.map{$0?.rawValue}
.subscribe(onNext: { [unowned self] in
if produkListrikDropDown.text != $0 {
produkListrikDropDown.text = $0
}
})
.disposed(by: disposeBag)
这是我的第二个textfield配置。只是一个接收用户输入的常规文本字段。
idPelangganField.rx.text
.bind(to: viewModel.currentIdPelangganBehaviorSubject)
.disposed(by: disposeBag)
发生了什么
当我点击第一个文本框并选择一个产品时,它的表现很好。但是当我点击第二个文本字段并点击第一个文本框时,第一个文本框上的edittingDidBegin触发了两次。这种情况在IOS 12.4上不会发生。
您可以克隆这个回购程序来重现问题https://github.com/Bobbyphtr/TextfieldDidEdittingProblem/tree/master。
发布于 2021-04-30 01:45:47
我找到了一种更好的方法,而不牺牲textfield的使用。就像丹尼尔T.说的那样,我们可以在上面使用一个点击手势识别器。我为UITextField放置了一个标记手势识别器,并将其设置为接收touch down
事件。它消除了textFieldShouldBeginEditting(_:)
的任何副作用,也不使用任何RxSwift进行调用。
https://stackoverflow.com/questions/67263289
复制相似问题