TouchUpInside上的Swift addTarget错误

时间:2015-06-19 15:13:43

标签: swift addtarget

我在视图上添加一个按钮并使用addTarget绑定事件来调用self.testp,但是当我运行它时,发生了错误:

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'

CODE是:

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

为什么?!!

2 个答案:

答案 0 :(得分:5)

只需从选择器中删除:,您的代码就是:

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

并将您的功能放在viewDidLoad方法之外,但在ViewController类中。

如果您的函数具有如下所示的参数,则可以使用"testp:"

func testp(yourArgument: String){
    println("tttt")
}

答案 1 :(得分:0)

最后,我想出来了

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)

        //!!!!!!remove ":" for testp
        //btn.addTarget(self, action: Selector("testp:"), forControlEvents: UIControlEvents.TouchUpInside);
        btn.addTarget(self, action: Selector("testp"), forControlEvents: UIControlEvents.TouchUpInside);

        self.view.addSubview(btn)
        //I should put testp out of viewDidLoad
        //I should put testup UIViewController
        //func testp(){
        //    println("tttt")
        //}
    }

    // put testp here it's work
    func testp(){
        println("tttt")
    }
}