我在视图上添加一个按钮并使用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")
}
}
}
为什么?!!
答案 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")
}
}