如何在集合视图单元格中添加uibutton操作?

时间:2017-01-04 04:56:30

标签: swift uibutton uicollectionview swift3 uicollectionviewcell

enter image description here

所以我有这个集合视图,其中包含位于右上角的编辑按钮。如何将动作连接到其中?

我尝试在cell.editbutton.addTarget中添加collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell但是它没有检测到touchUpInside事件。

5 个答案:

答案 0 :(得分:17)

在UICollectionViewCell中创建UIButton的插座,写入

func collectionView(_ collectionView: UICollectionView, 
                    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    cell.button.tag = indexPath.row
    cell.button.addTarget(self, 
        action: #selector(self.yourFunc(), 
        for: .touchUpInside)
}

func yourFunc(sender : UIButton){
    print(sender.tag)
}

确保为按钮和UICollectionViewCell启用了userInteraction。

答案 1 :(得分:7)

可能需要你 -

将此代码写入cellForItemAtIndexPath

Swift 2.X

let editButton = UIButton(frame: CGRectMake(0, 20, 40,40))
        editButton.setImage(UIImage(named: "editButton.png"), forState: UIControlState.Normal)
        editButton.addTarget(self, action: #selector(editButtonTapped), forControlEvents: UIControlEvents.TouchUpInside)

cell.addSubview(editButton)

Swift 3.X

let editButton = UIButton(frame: CGRect(x:0, y:20, width:40,height:40))
        editButton.setImage(UIImage(named: "editButton.png"), for: UIControlState.normal)
        editButton.addTarget(self, action: #selector(editButtonTapped), for: UIControlEvents.touchUpInside)

        cell.addSubview(editButton)

并执行您的操作 -

override func viewDidLoad() {

       super.viewDidLoad()

 }

@IBAction func editButtonTapped() -> Void {
    print("Hello Edit Button")
}

答案 2 :(得分:1)

在UICollectionView单元格上按钮(以编程方式或使用故事板)。在单元类文件中为该按钮添加操作,并在该单元类文件中声明委托,并在按钮操作方法中调用相同的委托来执行编辑操作。

然后在ViewController中实现相同的委托,您在其中创建了集合视图

答案 3 :(得分:0)

protocol CollectionViewCellDelegte {
func collectionViewCellDelegte(didClickButtonAt index: Int)
}

class ImageCollectionViewCell: UICollectionViewCell {

var index = 0
var delegte: CollectionViewCellDelegte? = nil

@IBAction func buttonAction(_ sender: UIButton) {
    if let del = self.delegte {
        del.collectionViewCellDelegte(didClickButtonAt: index)
    }
}

}

答案 4 :(得分:-1)

据我所知,您想调用编辑按钮操作而不是didSelectItemAt:indexPath。 我通过覆盖 canBecomeFocused (返回false)解决了这个问题,然后点击编辑按钮即可涉及您的编辑按钮操作