【发布时间】:2021-02-17 12:47:41
【问题描述】:
我使用rx swift 创建了一个tableView,它可以正常工作,除了一件事:如果我在输入view 时按下cell,则不会发生任何事情。我在.modeSelected 中添加了一个打印件,但它没有注册。如果我等待大约半秒到一秒,然后再按一次,它工作正常。这使用户体验感觉就像您必须双击才能使操作生效。
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.rx.modelSelected(SettingsTableViewCellViewModel.self).subscribe(onNext: { [weak self] cellViewModel in
print("THIS TRIGGERS ONLY IF YOU CLICK AFTER 0.5-1 SEC")
//STUFF HAPPENS
}).disposed(by: disposeBag)
}
由于modeSelected 在tableView 的didSet 内,我知道tableView 已经完成了它的工作并且所有数据都可用。我尝试将tableView.delaysContentTouches 设置为false,并确保将tableView.isUserInteractionEnabled 设置为true。
这是接受内容的方式:
func reloadContent() {
let allContent = [SettingsTableViewCellViewModel(title: "active_errors".localized(),
segue: "ErrorsSegue",
shouldBeShown: { return DoorConnectionStatus.connected == self.statusRelay?.value.status }),
SettingsTableViewCellViewModel(title: "events".localized(),
segue: "EventStatusSegue",
shouldBeShown: { return DoorConnectionStatus.connected == self.statusRelay?.value.status }),
SettingsTableViewCellViewModel(title: "event_log".localized(),
segue: "EventLogSegue",
shouldBeShown: { return DoorConnectionStatus.connected == self.statusRelay?.value.status }),
//...and it keeps going
]
content.accept(allContent.filter { $0.shouldBeShown() == true })
}
然后绑定到tableView:
viewModel.content.bind(to: tableView.rx.items(cellIdentifier: SettingsTableViewCell.identifier, cellType: SettingsTableViewCell.self)) { _, data, cell in
cell.viewModel = data
}.disposed(by: disposeBag)
【问题讨论】:
-
这种情况是每次都发生,还是仅在您启动应用程序后第一次发生?是仅在您使用模拟器时还是在设备上时才使用?
-
@DanielT。是的,每次我退出视图并重新进入时,我都会遇到问题。如果我等待一秒钟,那么没有问题。这也是一致的。我只在设备上运行它,因为该应用无法在模拟器上运行。
-
我只是设置了一个示例应用程序,其中包含您在上面编写的所有代码。我没有遇到你说的问题。您的问题不是此代码,而是其他地方。尝试编写一个最小的可编译示例,以解决您遇到的问题并更新您的问题。您可能会在制作样品时发现问题。
-
@DanielT 感谢您的测试。我会按照您的建议尝试,如果找到任何东西,我会回来。
标签: ios swift tableview rx-swift