How to add uibutton action in a collection view cell?

时光总嘲笑我的痴心妄想 提交于 2019-12-03 15:15:48
iDeveloper

May be needful for you-

Write this code in 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)

And perform your action-

override func viewDidLoad() {
       super.viewDidLoad()
}

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

Create the outlet of your UIButton in UICollectionViewCell, write In

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

Make sure userInteraction is enable for the button as well as for UICollectionViewCell.

On UICollectionView cell take button (Programmatically or using storyboard). Add action for that button in cell class file and declare delegate in that cell class file and call same delegate in button action method to perform edit action.

Then implement same delegate in ViewController in which you have created collection view

Mustafa Alqudah
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)
        }
    }
}

As I understood, you want to invoke edit button action instead of didSelectItemAt:indexPath. I solved this by override canBecomeFocused (return false), then your edit button action will be involved by tapping on edit button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!