Как игнорировать нажатия на аксессуары с помощью современного UICollectionViewListCell + UIListContentConfiguration
Я хочу игнорировать все нажатия на дополнительные виды ячейки.
Ячейки моего представления коллекции представляют собой простые ячейки типаUICollectionViewListCell
(без подкласса). Я используюUIListContentConfiguration
и обновить данные ячейки вUICollectionView.CellRegistration
.
Мои ячейки также отображаютсяUIAccessories
(пользовательский вид) на задней кромке. Аксессуары должны иметь только декоративное назначение (для отображения флажков).
extension UICellAccessory {
static func checkmarkView(state: UIImage.CheckboxState) -> UICellAccessory {
let imageView = UIImageView(image: UIImage.checkbox(state: state))
let configuration = UICellAccessory.CustomViewConfiguration.init(
customView: imageView,
placement: .trailing()
)
// imageView.isUserInteractionEnabled = false // has no effect
let accessory = UICellAccessory.customView(configuration: configuration)
return accessory
}
}
Как указано в настройке комментария UIImageViewisUserInteractionEnabled
как-то не влияет.
Мой UICollectionView выглядит так:
lazy var collectionView: UICollectionView = {
let layout = makeLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.delegate = self
collectionView.delaysContentTouches = false
return collectionView
}()
UICollectionView имеютisMultiSelectionEnabled
отключен по умолчанию, если это имеет значение.
При касании содержимого ячейки он ведет себя так, как ожидалось. Он запускает метод делегата, который я реализовывал бесчисленное количество раз.
Но при нажатии на дополнительный вид ячейки его поведение несколько неожиданно:
Наблюдения:
Если ячейка не выбрана:
Нажмите на дополнительные вызовы. При установке здесь точки останова ячейка в этот момент визуально не выделяется (чего я и ожидал, учитывая имя метода делегата).
Ячейка выделяет ячейку после выхода из этого метода.
Метод не срабатывает.
Если выбрана ячейка :
- Нажмите на аксессуар, вызывающий
didHighlightItemAt
и - триггеры
didSelectItemAt
после.
Чего я хочу достичь:
Нажатие на ячейку должно:
- Обновите модель данных (выбрав элемент).
- Ячейка должна подсветиться на короткое время
- Флажок должен отражать состояние выбора элемента.