如何在单击时向单元格添加边框

时间:2016-07-29 07:45:41

标签: ios swift xcode uicollectionview

我的目标是在用户点击单元格时创建边框。

以下代码有效:

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()

但现在根本没有任何事情发生。它不再打印,也没有重新加载。

3 个答案:

答案 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