В моем приложении у меня есть табличное представление с множеством строк.Представление таблицы заполняется наблюдаемой.Я делаю это, используя RxDataSources, используя RxTableViewSectionedAnimatedDataSource
.
. Строки табличного представления представляют некоторые элементы, над которыми пользователь может выполнять действия.Это означает, что я хочу, чтобы некоторые кнопки появлялись, когда выбрана строка, и я хочу, чтобы эти кнопки исчезали, когда ни одна строка не выбрана.Эти кнопки представляют собой действия, которые пользователь может выполнять над элементами.
Я подумал, что могу наблюдать свойство indexPathForSelectedRow
и связать его с button.rx.isHidden
, например:
[actionButton1, actionButton2, actionButton3].forEach { (button) in
button?.isHidden = true // they are always hidden initially
self.tableView.rx.observe(IndexPath?.self, "indexPathForSelectedRow")
.map { ($0 as? IndexPath) == nil } // $0 is a double optional, so I unwrap it like this
.bind(to: button!.rx.isHidden)
.disposed(by: disposeBag)
}
Однако, когда я выбираю элемент, кнопки действий не появляются вообще.
Я также пытался наблюдать indexPathsForSelectedRows
, но это дает тот же результат.
Затем я пыталсяподписаться на itemSelected
и itemDeselected
по отдельности:
[actionButton1, actionButton2, actionButton3].forEach { (button) in
button?.isHidden = true
self.tableView.rx.itemSelected.subscribe(onNext: {
_ in
button?.isHidden = false
}).disposed(by: disposeBag)
self.tableView.rx.itemDeselected.subscribe(onNext: {
[weak self] _ in
button?.isHidden = (self?.tableView.indexPathForSelectedRow ?? nil) == nil
}).disposed(by: disposeBag)
}
На этот раз, когда я выбираю строку, кнопки отображаются правильно.
Однако, когда изменяется наблюдаемый источник данных, такиечто выбранная строка удаляется, в результате чего в табличном представлении больше не остается выбранных строк, кнопки действий не исчезают .
Как сделать так, чтобы мои кнопки действий исчезаликогда в табличном представлении нет выбранных строк?
Обратите внимание, что мне все равно , какая строка выбрана.Я просто хочу знать , выбрана ли какая-либо строка.Другими словами, Observable<Bool>
, который выдает новое значение всякий раз, когда выражение «в табличном представлении есть хотя бы одна выбранная строка» изменяется с true на false или с false на true.