我尝试创建简单的按钮,并在另一个类中处理它的事件。所以我写了这样的东西:
var handler = Handler()
var btn = UIButton(...)
...
btn.addTarget(handler, "onClick", UIControlEvents.TouchDown)
view.addSubview(btn)
我声明类处理程序:
class Handler : UIViewController {
func onClick() {
NSLog("Success!")
}
}
但是当我点击按钮时,我的程序因一些错误而崩溃,并突出显示这个标准的自动生成代码:
类 AppDelegate: UIResponder, UIApplicationDelegate { ----- 线程 1: EXC_BAD_ACCESS(code=2, address=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。