TenViewController代码:
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
}
收集代表
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
}
我尝试使用此功能,但它不起作用
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代码
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")
}
}
我想取消选择单元格,我该怎么办?
有没有人可以帮助我PLZ谢谢你的队友!!
如何制作一个按钮可以选择所有单元格?
答案 0 :(得分:13)
您还需要在allowsSelection
而不是allowsMultipleSelection
中设置属性viewDidLoad
和didSelectItemAt indexPath
,还要重新使用单元格,以便在滚动时更改单元格的选择用于防止此问题的CollectionView
创建一个类型为[IndexPath]
的实例,并在您的collectionView方法中访问它。
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
}
}
答案 1 :(得分:12)
Swift 3.0解决方案
extension UICollectionView {
func deselectAllItems(animated: Bool = false) {
for indexPath in self.indexPathsForSelectedItems ?? [] {
self.deselectItem(at: indexPath, animated: animated)
}
}
}
如何使用?
myCollectionView.deselectAllItems(false)