Brett Taylor
Brett Taylor

Reputation: 107

How do you pass data from tableview cell button with a UILongPressGestureRecognizer?

I have a button in my cell that if the user holds for a certain length of time it will trigger a popup. I am having trouble passing the cell data with the long press button.

Heres how I submit and pass data with a regular tap...

cell.addButton.tag = (indexPath as NSIndexPath).row

cell.addButton.addTarget(self, action: #selector(Dumps.addAction(_:)), for: UIControl.Event.touchUpInside)

.

@IBAction func addAction(_ sender: Any) {
                
let tag = (sender as AnyObject).tag
            
let cell = tableView.cellForRow(at: IndexPath.init(row: tag!, section: 0)) as! DumpsCell01
        
codeData = cell.codeField.text! }

The above works fine.


Heres how I submit the button with the long press gesture. Its passing nil through _sender I think

cell.deleteButton.tag = (indexPath as NSIndexPath).row

let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(Dumps.deleteAction(_:)))

cell.deleteButton.addGestureRecognizer(longGesture)

.

@objc func deleteAction(_ sender: UIGestureRecognizer){

let tag = (sender as AnyObject).tag
                
let cell = tableView.cellForRow(at: IndexPath.init(row: tag!, section: 0)) as! DumpsCell01
    
cell.codeLabel.backgroundColor = UIColor.red }

How would I pass the data through this method?

Upvotes: 0

Views: 130

Answers (1)

Frankenstein
Frankenstein

Reputation: 16341

You should be using the tag of the UIButton instead of the UILongPressGestureRecognizer as you have done above.

func deleteAction(_ sender: UILongPressGestureRecognizer) {
    guard let tag = (sender.view as? UIButton)?.tag else { return }
    let cell = tableView.cellForRow(at: IndexPath(row: tag, section: 0)) as? DumpsCell01
    cell?.codeLabel.backgroundColor = .red
}

Note: I've also avoided force unwrapping as you should too through-out the project.

Upvotes: 1

Related Questions