UICollectionView采用2个独立设计

时间:2016-12-28 07:15:59

标签: ios swift uicollectionview

我有UICollectionView,所选的单元格应该像pic中的黄色单元格。那么如何对所选单元格进行单独设计以及如何在其上方绘制该曲线? 我应该为此使用2个单独的UICollectionViewCell吗?或者有任何替代方法可以在选择时重复使用相同的单元格。

enter image description here

2 个答案:

答案 0 :(得分:1)

  

我应该为此使用2个单独的UICollectionViewCell吗?

这是一条路。如果存在的差异多于您描述的差异,请执行此操作。

  

或者有任何替代方法可以在选择时重复使用相同的单元格。

当然,你可以做到。查看插图中的两个单元格,但请考虑每个单元格上方的灰色部分作为单元格的一部分。黑色矩形和黄色凸出矩形只是您在单元格背景中绘制的两个不同图像,您可以通过更改该图像以任一方式配置相同类型的单元格。如果细胞的其他方面(如标记的位置等)在两个细胞之间是相同的,那么这是一种很好的方法。

答案 1 :(得分:1)

如果这是您想要在选择之后做出的唯一不同之处,我认为无需创建两个不同的UICollectionViewCell,而是需要在indexpath.row上保留引用(s)所选单元格并检查这是否是所选行,更改/添加新背景图像。

例如:

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    // here is the variable that should save the current selected row...
    private var selectedRow: Int?

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        // let's consider that you have a custom cell called "MyCustomCell"
        // which has "backgroundImage" property...
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCellID", for: indexPath) as! MyCustomCell

        // checking based on the selected row
        cell.backgroundImage = indexPath.row == selectedRow ? UIImage("yellow") : UIImage("default")

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        selectedRow = indexPath.row
        collectionView.reloadData()
    }
}

请注意,如果要检查多行,则应将selectedRows声明为Ints的数组(或可能是一组)。

希望它有所帮助。