Swift TouchUpInside 上的 addTarget 错误
Swift addTarget Error on TouchUpInside
我在视图上添加了一个按钮,并使用 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")
}
}
}
为什么?!!
只需从您的选择器中删除 :
,您的代码将是:
btn.addTarget(self, action: Selector("testp"), forControlEvents: UIControlEvents.TouchUpInside)
并将您的函数放在 viewDidLoad
方法之外,但放在 ViewController
class.
中
如果您的函数具有如下所示的参数,则可以使用 "testp:"
:
func testp(yourArgument: String){
println("tttt")
}
最后,我弄明白了
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")
}
}
我在视图上添加了一个按钮,并使用 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")
}
}
}
为什么?!!
只需从您的选择器中删除 :
,您的代码将是:
btn.addTarget(self, action: Selector("testp"), forControlEvents: UIControlEvents.TouchUpInside)
并将您的函数放在 viewDidLoad
方法之外,但放在 ViewController
class.
如果您的函数具有如下所示的参数,则可以使用 "testp:"
:
func testp(yourArgument: String){
println("tttt")
}
最后,我弄明白了
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")
}
}