3

我在视图上添加了一个按钮并使用 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'

代码是:

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

为什么?!!

4

2 回答 2

5

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

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

并将您的功能放在viewDidLoad方法之外但在ViewController课堂上。

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

func testp(yourArgument: String){
    println("tttt")
}
于 2015-06-19T15:16:21.813 回答
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")
    }
}
于 2015-06-19T15:27:25.030 回答