我有一个 collectionView 和一个包含我的类别的单元格。 他们来了

我需要设置按下和未按下。 两个状态。 我的单元格中只有一个标签。 没有按钮。 这是我的一些代码。 我认为这很容易做到。

class CategoryCollectionViewCell: UICollectionViewCell, NibLoadable {

enum state {
case pressed
case unpressed
}

@IBOutlet weak var label: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    Decorator.decorate(self)
    addTargets()
}

func setText(text: String) {
    label.text = text
}

func setFont(font: UIFont) {
    label.font = font
}

func setFontColor(color: UIColor) {
    label.textColor = color
}

func setColor(backgroundColor: UIColor, borderColor: CGColor, borderWidth: CGFloat) {
    self.backgroundColor = backgroundColor
    self.layer.borderColor = borderColor
    self.layer.borderWidth = borderWidth
}

private func addTargets() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
    self.addGestureRecognizer(tap)
}

@objc func tapped() {

}

}

如您所见,我创建了更改单元格颜色的功能。

这是我在 VC 中的方法

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


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let category = categories[indexPath.item]

    if category.id == "userId" {

      let cell = collectionView.dequeueReusableCell(withReuseIdentifier:CategoryCollectionViewCell.name, for: indexPath) as! CategoryCollectionViewCell
        cell.label.text = category.name
        return cell
    } else if category.id == "UniqueID" {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCollectionViewCell.name, for: indexPath) as! CategoryCollectionViewCell
        let tap = UITapGestureRecognizer(target: self, action: #selector(addNewCategory))
        cell.label.isUserInteractionEnabled = true
        cell.label.text = "+ add"
        cell.label.addGestureRecognizer(tap)
        cell.setColor(backgroundColor: .white, borderColor: monPurple.cgColor, borderWidth: 1.0)
        cell.setFontColor(color: .purple)
        return cell
    }
    return UICollectionViewCell.init()
}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets (top: 10, left: 16, bottom: 10, right: 16)
}

我的朋友有什么想法吗?

#1楼 票数:0

首先,为什么要使用点击手势,何时可以使用集合视图委托来使用 didSelectItem 委托方法。

我假设你不知道,所以我为此附上了一个例子

func collectionView(UICollectionView, didSelectItemAt: IndexPath)

在此函数中,您可以获取 collectionviewcell 本身的抽头。

现在解决您的问题,您需要维护一个模型类来帮助您保存数据。

例子 -

struct CategoryModel {

    var categoryName : String
    var isCategorySelected : Bool //or you can use your enum here
}

在你的 vc 中初始化这个模型数组,我假设这个

var dataModels : [CategoryModel] // you fill it

现在在你的 cellforItemAt

管理单元格的选中和未选中状态

例如

if dataModels[indexPath.item].isCategorySelected == true {
    //manage selected cell state
}else  {
    //manage unselected cell state

}


func collectionView(UICollectionView, didSelectItemAt: IndexPath) {

    dataModels[indexPath.item].isCategorySelected = !dataModels[indexPath.item].isCategorySelected //change your model data here according to the tap
    // now reload your cell here for that specific indexpath

}

  ask by Евгений Тишкин translate from so

未解决问题?本站智能推荐:

3回复

CollectionViewCell中的UIButton“IndexPath不起作用”

我做了一个简单的应用程序,将uibutton添加到collectionviewcell,但是当我执行操作时会发生错误。 这是一个屏幕截图。 错误1 错误2 和我的课程代码:UIbuton {} 我的细胞班级是: 和错误: 我的错在哪里 你能帮助我吗 ?
1回复

在CollectionViewCell中输入UITextField(swift3xcode)

我有一个UITextField,它已添加到collectionViewCell的子视图中。 这是代码: } 我在另一个类中有一个调用此方法的按钮,此刻打印出textField的当前输入(可能是因为在buttonHandler()函数中)。 问题是,由于某些原因,textField总是
3回复

CollectionViewCell相对于CollectionView的自动布局大小

我在 CollectionView 中放置了一个 CollectionViewCell。 CollectionView 的大小是通过自动布局设置的,并且可以不时更改。 我想(以编程方式)在我的 CollectionView 上设置约束,以便 CollectionViewCell 的大小响应于 Co
1回复

无法获取collectionViewCell项目的框架以进行过渡

我试图将视图转换到另一个viewController的collectionViewCell的imageView中。 为此,我需要将collectionViewCell中的imageView框架转换为Window。 我正在尝试在viewWillAppear中使用以下内容: boundin
2回复

在iosswift中的相应按钮上显示和隐藏相同视图控制器中的两个xib

我有一个视图控制器,我已经采取了一个视图,在该视图中,我有两个按钮,在该视图下方,我有一个集合视图。 我为每个按钮单击创建了2个自定义xib。 默认为按钮1我已设置xib 1但是当我点击按钮2然后不知道如何显示xib 2 按钮1的屏幕截图结果: 按钮2的屏幕截图结果: 类别x
2回复

按钮未显示在collectionviewcellswift中

我正在尝试与嵌入在 collectionviewcell 中的按钮进行交互。 但它没有显示,我不确定我的代码有什么问题。class Classic: UIViewController, UICollectionViewDataSource { func collectionView(_ col
2回复

uitableview中的uicollection视图始终显示0array.lenth并且从不加载数据

我在我的项目中面临一个问题基本上我想在 uitableview 中使用 uicollectionview 但它总是显示 0 个数组 .count in numberOfItemsInSection of collectionview 这里是 tableview 单元格内的集合视图的代码 我的 JSO
2回复

如何在Swift中设置collectionview单元之间的间距?

http://i.stack.imgur.com/8nGKh.png 如何在集合视图单元格中的行之间设置间距。 如您所提供的图片所示,它们距离太近了。 由于它们距离太近,因此标签中的文本不能分成两行,而我试图弄清楚该怎么做,但是找不到任何东西,因为我搜索的所有内容都在目标-c中,而