ICL1901
ICL1901

Reputation: 7778

How to add a target action to a UITableViewCell

I've added a button to a specific UITableViewCell. When I select the button, I get a crash:

ButtonTapped libc++abi.dylib: terminating with uncaught exception of type NSException

At the beginning of cellForRowAt, I'm defining the button:

let myButton = UIButton(type: .custom)
myButton.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
myButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
myButton.tintColor = UIColor.yellow()

For the indexpath.row I attach the button like this:

cell.accessoryView = myButton as UIView

And the action buttonTapped tries to load a different ViewController.

I get confirmation that the button action worked (the routine was called). The routine is as follows:

func buttonTapped() {
    print("ButtonTapped")

    let myPickerController = self.storyboard?.instantiateViewController(withIdentifier: "picker") as? MyPickerController
    print("1")
    self.present(myPickerController!, animated: true)
    print("2")
}

As you can see from the log, I do see that the routine was called, but I do not see the print values 1 or 2 before the crash. Anyone see what I'm doing wrong?

Upvotes: 3

Views: 7199

Answers (1)

Jigar Tarsariya
Jigar Tarsariya

Reputation: 3247

Add target like,

 myButton.addTarget(self, action: #selector(YourControllerName.buttonTapped(_:)), for: .touchUpInside)

then change your function like,

 func buttonTapped(sender : UIButton){

 ....
 }

Hope this helps you.

Upvotes: 4

Related Questions