我有一个UICollectionView,用户可以选择多个单元格。跟踪选择了哪些单元格有点困难,因此我需要一些方法来点击单元格时突出显示/创建边框。
代码:
func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
addToList.append(objectsArray[indexPath.row])
return true
}
答案 0 :(得分:44)
您可以在didSelectItemAtIndexPath
覆盖事件上使用边框更改,如下面的代码,并在单元格上指定新设置。
Swift 3.x:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
addToList.append(objectsArray[indexPath.row])
let cell = collectionView.cellForItem(at: indexPath)
cell?.layer.borderWidth = 2.0
cell?.layer.borderColor = UIColor.gray.cgColor
}
答案 1 :(得分:12)
这是我的解决方案,我确信它有效。
我的解决方案包括3个高亮效果,UICollectionCell
的{{1}},selectedBackgroundView
或您自己的cell.contentView.backgroundColor
。
如何使用?只需继承specialHighlightedArea
。如果需要,请在单元格的BaseCollectionViewCell
或init
委托方法中进行配置。
如果您不需要突出显示效果,只需在shouldHighlightItemAtIndexPath中找到名为“UICollectionViewDelegate”的方法并返回collectionView
或只设置false
。
cell.shouldTintBackgroundWhenSelected = false
答案 2 :(得分:4)
使用
collectionView.reloadItemsAtIndexPaths([indexPath])
重新加载当前单元格,或
collectionView.reloadData()
重新加载shouldSelectItemAtIndexPath
然后在cellForItemAtIndexPath
中设置边框或背景颜色(如果单元格被标记为已选中)(对于带有最佳indexPaths的已检查单元格,您可能需要一个新数组。
答案 3 :(得分:4)
您可以创建自定义的collcetionViewCell,并覆盖:
class MyCell: UICollectionViewCell {
override var isHighlighted: Bool {
didSet {
if self.isHighlighted {
print("yes")
// Your customized animation or add a overlay view
} else {
print("no")
// Your customized animation or remove overlay view
}
}
}
}
这样,您可以创建类似于UITableViewCell上的高亮效果的结果。
没有子类化:
如果您不想创建自己的collectionViewCell。你可以使用委托方法:
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath)
你可以用它做同样的事情。
答案 4 :(得分:2)
SWIFT
将此代码添加到您的UICollectionViewCell子类中:
override var isSelected: Bool {
didSet{
if self.isSelected {
self.backgroundColor = UIColor(red: 115, green: 190, blue: 170, alpha: 1.0)
}
else {
self.backgroundColor = UIColor(red: 60, green: 63, blue: 73, alpha: 1.0)
}
}
}
这将设置单个选定单元格的颜色,并从任何先前选定的单元格中删除选定的颜色。
答案 5 :(得分:1)
尝试使用此代码突出显示集合视图单元格
func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) {
cell.contentView.backgroundColor = #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1)
}
}
func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
if let cell = collectionView.cellForItem(at: indexPath) {
cell.contentView.backgroundColor = nil
}
}
答案 6 :(得分:0)
尝试使边框足够厚以覆盖整个单元格
代码:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
addToList.append(objectsArray[indexPath.row])
let cell = collectionView.cellForItem(at: indexPath)
cell?.layer.borderWidth = 200.0
cell?.layer.borderColor = UIColor.init(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.4).cgColor
}
答案 7 :(得分:0)
对于单元格的多个选择,您可以按照以下步骤进行操作:
JSON_SORT_KEYS = False
对于单个选择,可以按如下方式在collectionviewcell类中使用isSelected:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
if let currentCell = collectionView.cellForItem(at: indexPath) as? QuestionnaireCollectionViewCell {
// Your selection logic, you can change it according to your requirement
if currentCell.selectedImage.isHidden == true{
currentCell.selectedImage.isHidden = false
}
else{
currentCell.selectedImage.isHidden = true
}
}
}
}