我试图掌握RxSwift,我需要验证表单,我已经完成了没有tableView的简单验证,但现在我的文本输入字段在集合视图中,我想观察文本输入的变化,因为textfields是现在在可重复使用的单元格中,我不确定如何添加observable并从中获取流
基本上我想要将我的数据双向绑定到我的表单,其中输入是动态的,如果这有帮助
这是我的cellForItemAt函数的代码
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: RegisterCell.identifier, for: indexPath) as! RegisterCell
var registerField = dataSource[indexPath.item]
registerField.indexPath = indexPath
registerField.text = viewModel.getText(indexPath: indexPath)
let txt = cell.txtfield as UITextField
txt.delegate = self
cell.configureCell(registerField)
return cell
}
并配置单元格
func configureCell(_ fieldData: RegisterFields) {
txtfield.placeholder = fieldData.placeholderText
txtfield.isSecureTextEntry = fieldData.isSecureEntry
txtfield.text = fieldData.text
txtfield.tag = fieldData.indexPath.item
imgIcon.image = fieldData.image
imgDropDown.isHidden = !fieldData.isDropDown
}
我想将Rx用于用户输入而不是委托模式,如以下行
所示txt.delegate = self
以下是我的屏幕图像
答案 0 :(得分:6)
首先给你的自定义单元格它自己的处理包用于dealloc目的
import RxSwift
class YourCustomCell: UITableViewCell {
var disposeBag = DisposeBag()
@IBOutlet weak var textfield: UITextField!
override func prepareForReuse() {
super.prepareForReuse()
disposeBag = DisposeBag()
}
}
然后在您的控制器中,收听文本字段输入流:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = cell as? YourCustomCell, textfield = cell.textfield else { return }
textfield
.rx.textInput.text.orEmpty
.asDriver()
.drive(onNext: { [unowned self] text in
//do what you want here
})
.addDisposableTo(cell.disposeBag)
}