CollectionView didDeselectItemНе вызывается для выбора Single в CollectionView - PullRequest
1 голос
/ 16 апреля 2020

Ниже приведен мой код для CollectionView

    categoryCollectionView.delegate = self
    categoryCollectionView.dataSource = self
    categoryCollectionView.allowsSelection = true
    categoryCollectionView.allowsMultipleSelection = false

Ниже приведен код UICollectionViewCell

class AppPageCategoryViewCell: UICollectionViewCell {
var catgory : String?

@IBOutlet weak var titleLbl: UILabel!

@IBOutlet weak var closeImageView: UIImageView!



@IBOutlet weak var stackContainer: UIView!
var facet : Facets?

func setUI() {
    titleLbl.text = facet?.name ?? ""
    let isSelected = facet?.isSelected ?? false
    stackContainer.layer.borderColor =  UIColor.black.cgColor
    stackContainer.backgroundColor = isSelected ? UIColor.black : UIColor.white
    titleLbl.textColor = isSelected ? UIColor.white : UIColor.black
    closeImageView.image = closeImageView.image?.withRenderingMode(.alwaysTemplate)
    closeImageView.tintColor = UIColor.hexStringToUIColor(hex: AppStrings.whiteColor)
    stackContainer.layer.cornerRadius =  16
    stackContainer.layer.borderWidth = 1
    closeImageView.isHidden = !isSelected

  }
}

Ниже приведен метод выбора деселекта

 func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

    print("deselect----------deselect")

}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

     print("select----------select")

}

Сейчас didDeselectItemAt не вызывается, если я выбираю один и элемент и выбираю другой элемент или если я выбираю тот же элемент didDeselectItemAt вообще не вызывается, он просто вызывает didSelectItemAt метод, почему? как это исправить?

1 Ответ

0 голосов
/ 16 апреля 2020

Этот метод делегата не запускается, потому что вы устанавливаете логическое значение «allowMultipleSelection» в значение false. Это должно быть верно, чтобы разрешить отмену выбора элемента.

https://developer.apple.com/documentation/uikit/uitableview/1614938-allowsmultipleselection

РЕДАКТИРОВАТЬ:

Я считаю, что вам нужно сделать здесь является использование метода делегата "shouldSelectItemAt" из collectionView, чтобы проверить, выбрана ли уже выбранная ячейка или нет. Если true, то вы можете отменить выбор, если false, ничего не делать.

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
    if let currentIndexPathSelected = cellSelectedIndexPath, currentIndexPathSelected == indexPath {
        collectionView.deselectItem(at: indexPath, animated: true)
        collectionView.delegate?.collectionView?(collectionView, didDeselectItemAt: indexPath)
        return false
    }
    return true
}

cellSelectedIndexPath - это закрытая переменная для хранения текущего выбранного indexPath.

Вызов делегата вызовет метод didDeselectItemAt ,

Дайте мне знать, если это поможет.

...