Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift addTarget Error on TouchUpInside

I add a button on the view and bind event use addTarget , to call self.testp , but while I'm run it , an Error occured:

2015-06-19 23:08:29.237 UI[16978:1700826] -[UI.ViewController testp:]: unrecognized selector sent to instance 0x7864d4a0
2015-06-19 23:08:29.240 UI[16978:1700826] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UI.ViewController testp:]: unrecognized selector sent to instance 0x7864d4a0'

The CODE is :

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    var btn:UIButton = UIButton.buttonWithType(UIButtonType.DetailDisclosure) as! UIButton
    btn.frame = CGRectMake(10, 150, 100, 30)
    btn.setTitle("button", forState: UIControlState.Normal)

    //!!!!!!DID NOT WORK
    btn.addTarget(self, action: Selector("testp:"), forControlEvents: UIControlEvents.TouchUpInside);

    self.view.addSubview(btn)

    func testp(){
        println("tttt")
    }
}
}

WHY?!!

like image 739
Mofei Zhu Avatar asked May 05 '26 05:05

Mofei Zhu


1 Answers

Just remove : from your selector and your code will be:

btn.addTarget(self, action: Selector("testp"), forControlEvents: UIControlEvents.TouchUpInside)

And put your function outside viewDidLoad method but in ViewController class.

You can use "testp:" if your function have argument like shown below:

func testp(yourArgument: String){
    println("tttt")
}
like image 55
Dharmesh Kheni Avatar answered May 08 '26 08:05

Dharmesh Kheni



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!