Swift - 想要在单击集合视图单元格内的按钮时进行更改

Posted

技术标签:

【中文标题】Swift - 想要在单击集合视图单元格内的按钮时进行更改【英文标题】:Swift - want to make changes when a button clicked which is inside a collection view cell 【发布时间】:2018-08-16 04:49:55 【问题描述】:

我创建了一个包含 UIView 的集合视图单元格,并且在 UIView 内部有一个按钮。 我想要做的是当按钮点击它会改变 UIView 边框颜色。 我从服务器加载数据并将其显示到集合视图。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CypherCollectionViewCell", for: indexPath as IndexPath) as! CypherCollectionViewCell

    cell.tickButton.addTarget(self, action: #selector(tickButtonClicked(sender:)), for: .touchUpInside)

    return cell


@objc func tickButtonClicked( sender: UIButton) 
    if sender.isSelected 
        sender.isSelected = false
        // To change the UIView border color
     else 
       sender.isSelected = true
       // To change the UIView border color
    

谢谢!

【问题讨论】:

代码看起来不错,检查是否启用了用户交互。 代码看起来不太好。你用什么来改变视图边框的颜色? cell.view.borderColor?如果是这样,您从ticketButtonClicked 中的哪里获得单元格? 这是一个糟糕的实现。您应该在单元格内有按钮操作。 对不起,错过了。 【参考方案1】:

您可以将按钮点转换为视点并获得所需的单元格。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CypherCollectionViewCell", for: indexPath as IndexPath) as! CypherCollectionViewCell

    cell.tickButton.addTarget(self, action: #selector(tickButtonClicked(sender:)), for: .touchUpInside)

    return cell


@objc func tickButtonClicked( sender: UIButton) 

    var convertedPoint : CGPoint = sender.convert(CGPoint.zero, to: self. collectionView)
    var indexPath = self. collectionView.indexPathForItemAtPoint(convertedPoint)
    let cell = self. collectionView.cellForItemAtIndexPath(indexPath) as! CypherCollectionViewCell

    if sender.isSelected 
        sender.isSelected = false
        // To change the UIView border color
        cell.view.borderColor = UIColor.blue()
     else 
       sender.isSelected = true
       // To change the UIView border color
        cell.view.borderColor = UIColor.red()
    

【讨论】:

以上是关于Swift - 想要在单击集合视图单元格内的按钮时进行更改的主要内容,如果未能解决你的问题,请参考以下文章

使用Swift 3单击collectionView单元格内的项目时如何导航另一个视图控制器

swift中集合视图单元格内的按钮操作

在集合视图单元格 Swift 中管理多个进度视图

当在同一个单元格内单击按钮时,如何在自定义表格视图单元格内隐藏/显示特定视图

集合视图单元格内容是分层的

如何为集合视图单元格内的视图添加手势?