Swift how to deselect Cell Cell

TenViewController Code:

class TenViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { var selectedCell: UICollectionViewCell! var arrayLocation = ["aaa", "bbb", "ccc", "ddd", "eee"] var myCollectionView: UICollectionView! func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int { return arrayLocation.count } 

collection delegate

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MyCollectionViewCell cell.backgroundColor = UIColor.white cell.titleLabel?.text = arrayLocation[indexPath.row] cell.titleLabel.font = UIFont.systemFont(ofSize: 24) return cell } // check cell and do somthing func collectionView(_ collectionView: UICollectionView,didSelectItemAt indexPath: IndexPath) { selectedCell = myCollectionView.cellForItem(at: indexPath)! selectedCell.contentView.backgroundColor = UIColor.red collectionView.allowsSelection = true collectionView.allowsMultipleSelection = true } 

I try to use this function, but it does not work

  func collectionView(_ collectionView: UICollectionView,didDeselectItemAt indexPath: IndexPath) { myCollectionView.deselectItem(at: indexPath, animated: false) } override func viewDidLoad() { //get view size let fullsize = UIScreen.main.bounds.size //get collectionViewCell layout let layout = UICollectionViewFlowLayout() //cell size layout.itemSize = CGSize(width: 120, height: 30) //mycollectionView size myCollectionView = UICollectionView(frame: CGRect(x: 108, y: 70, width: fullsize.width - 70, height: fullsize.height - 180), collectionViewLayout: layout) myCollectionView.delegate = self myCollectionView.dataSource = self myCollectionView.backgroundColor = UIColor.white myCollectionView.register(MyCollectionViewCell.self, forCellWithReuseIdentifier: "Cell") layout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 50); layout.minimumLineSpacing = 10 layout.minimumInteritemSpacing = 0.5 myCollectionView.backgroundColor = UIColor(patternImage: myPag) self.view.addSubview(myCollectionView) } } 

MyCollectionViewCell Code

 class MyCollectionViewCell: UICollectionViewCell { var titleLabel:UILabel! override init(frame: CGRect) { super.init(frame: frame) // create UILabel let w = Double(UIScreen.main.bounds.size.width) titleLabel = UILabel(frame:CGRect(x: 0, y: 0, width: w/3 - 10.0, height: 30)) titleLabel.textAlignment = .center titleLabel.textColor = UIColor.black self.addSubview(titleLabel) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 

I would like to deselect a cell and what should I do?

Can anyone help me, thanks mate !!

How to make a button you can select the whole cell?

+5
source share
2 answers

You need to set the allowsSelection and allowsMultipleSelection also in viewDidLoad instead of didSelectItemAt indexPath . You also reuse the cell so that your cell selection changes as you scroll through the CollectionView to prevent this problem. one instance of type [IndexPath] and access it in your collectionView method like this.

 var selectedCell = [IndexPath]() func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! MyCollectionViewCell cell.titleLabel?.text = arrayLocation[indexPath.row] cell.titleLabel.font = UIFont.systemFont(ofSize: 24) if selectedCell.contains(indexPath) { cell.contentView.backgroundColor = .red } else { cell.contentView.backgroundColor = .white } return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let cell = collectionView.cellForItem(at: indexPath)! selectedCell.append(indexPath) cell.contentView.backgroundColor = .red } func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { let cell = collectionView.cellForItem(at: indexPath)! if selectedCell.contains(indexPath) { selectedCell.remove(at: selectedCell.index(of: indexPath)!) cell.contentView.backgroundColor = .white } } 
+9
source

Swift 3.0 Solution

 extension UICollectionView { func deselectAllItems(animated: Bool = false) { for indexPath in self.indexPathsForSelectedItems ?? [] { self.deselectItem(at: indexPath, animated: animated) } } } 

How to use?

 myCollectionView.deselectAllItems(false) 
+6
source

Source: https://habr.com/ru/post/1259573/


All Articles