我的目标是在用户点击单元格时创建边框。
以下代码有效:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
print("Cell \(indexPath.row) selected")
}
然后我添加了这段代码,以使边框着色,但没有效果。
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell : MKStandItemAdd = collectionView.dequeueReusableCellWithReuseIdentifier("ItemCell", forIndexPath: indexPath) as! MKStandItemAdd
cell.layer.borderWidth = 7
cell.layer.borderColor = UIColor.blueColor().CGColor
print("Cell \(indexPath.row) selected")
}
上面的代码仍会打印,但它没有改变颜色。
所以我补充说:
self.collectionView.reloadData()
但现在根本没有任何事情发生。它不再打印,也没有重新加载。
答案 0 :(得分:0)
当您重新加载或滚动单元格时,直接设置为didSelectItemAtIndexPath
上的单元格。
更好的方法是在cellForRowAtIndexPath
内部渲染单元格。
首先,我们需要一个类变量
var selectedRow = -1
因此,在cellForRowAtIndexPath
中,您需要检查所选的行索引
// check if selected
if indexPath.row == selectedRow {
cell.layer.borderWidth = 7
cell.layer.borderColor = UIColor.blueColor().CGColor
}
else {
cell.layer.borderWidth = 0
}
在didSelectRowAtIndexPath
需要重新加载单元格
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: true)
答案 1 :(得分:0)
在cellfotitemAtIndexPath
写
if(cell.isselected)
{
cell.layer.borderWidth = 7
cell.layer.borderColor = UIColor.blueColor().CGColor
}
else
{
//No border and no border color
}
DidSelectitemAtIndexPath
中的
重新加载您的收藏视图
答案 2 :(得分:0)
这是我在阅读前2条评论后找到的简单解决方案
let cell = self.collectionView.cellForItemAtIndexPath(indexPath)
cell!.layer.borderWidth = 7
cell!.layer.borderColor = UIColor.blueColor().CGColor