RxSwift не распознает выбранные модели TableView без длительного нажатия

#ios #swift #uitableview #rx-swift

#iOS #быстрый #uitableview #rx-swift

Вопрос:

Я пытаюсь вызвать modelSelected функцию с помощью RxSwift в моем UITableView, но по какой-то причине, в отличие от любого другого UITableView, который я реализовал в своей кодовой базе, он не распознает мой жест касания, если я не удерживаю нажатой ячейку табличного представления.

У меня есть табличное представление, которое я подключил к своему файлу .xib. В этом файле .xib я встроил свое табличное представление в свой UIViewController и определил макет для прототипа ячейки табличного представления.

 @IBOutlet private var tableView: UITableView!
 

И это то, что у меня есть в моей viewDidLoad функции.

 viewModel.modelArray
            .bind(to: tableView.rx.items(cellIdentifier: CustomTableViewCell.reuseIdentifier, cellType: CustomTableViewCell.self)) { row, element, cell in
                // Assign cell UI properties
            }
            .disposed(by: disposeBag)

tableView.rx.modelSelected(ModelClass.self)
            .subscribe(onNext: { [weak self] model in
                // Respond to cell tap
            })
            .disposed(by: disposeBag)
 

Может быть, я чего-то здесь не понимаю?

Комментарии:

1. В опубликованном вами коде ничего не пропущено, и он работает правильно. Проблема должна быть где-то в другом месте.

2. Если вы используете симулятор, я обнаружил, что иногда сбои пользовательского интерфейса и касания не регистрируются должным образом. Попробуйте отключить симулятор и запустить его снова

Ответ №1:

После некоторых поисков и разговора с командой RxSwift мне удалось найти основную причину этой проблемы: на этом контроллере представления был конфликтующий UIGestureRecognizer.

Я назначил его компоненту этого контроллера представления view , что в конечном итоге мешало жесту касания для modelSelected функции. Итак, хотя modelSelected функция для моего табличного представления не обязательно игнорировалась, она будет распознана только после длительного нажатия.