我尝试创建一个简单的按钮,在另一个类中处理它的事件。 所以我写了类似的东西:
var handler = Handler()
var btn = UIButton(...)
...
btn.addTarget(handler, "onClick", UIControlEvents.TouchDown)
view.addSubview(btn)
我宣布班级处理程序:
class Handler : UIViewController {
func onClick() {
NSLog("Success!")
}
}
但是当我点击按钮时,我的程序崩溃了一些错误,并突出显示这个标准,自动生成的代码:
class AppDelegate:UIResponder,UIApplicationDelegate {-----线程1:EXC_BAD_ACCESS(代码= 2,地址= 0xc)
那么有人可以解释如何使用处理按钮的事件,而不是self
类吗?
UPD:即使我使用下一个方式也会导致同样的错误:
class Handler : UIViewController {
func addButton() -> UIButton {
*initialize button*
btn.addTarget(self, "onClick", .TouchDown)
return btn
}
func onClick() { NSLog("Success") }
}
....
view.addSubview(Handler().addButton())
解决方案:原因是为目标创建了类。我在viewDidLoad()
为我的例子创建它,当方法完成执行时,对象被删除。
它需要在更一般的上下文中创建该目标对象,如类字段或smth。