Как игнорировать нажатия на аксессуары с помощью современного 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после.

Чего я хочу достичь:

Нажатие на ячейку должно:

  1. Обновите модель данных (выбрав элемент).
  2. Ячейка должна подсветиться на короткое время
  3. Флажок должен отражать состояние выбора элемента.

0 ответов

Другие вопросы по тегам