我正面临这个问题:我想为按钮创建的运行时分配一个动作,我使用这个自定义类:
import UIKit
class SubViewManager: NSObject {
var button = UIButton()
然后我有了在视图中添加按钮的功能:
frame.addSubview(button)
分配动作的功能:
func setButtonAction(sender: UIButton!, buttonAction: Selector) {
button.addTarget(self, action: buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
}
现在在ViewController类中,我调用SubViewManager对象,如下所示:
var newSubView:SubViewManager!
然后在我正在执行的程序中:
newSubView.addButton(...//Dimension and details//...)
newSubView.setButtonAction(newSubView.button, buttonAction: "save")
这里我遇到了问题,控制台中出现了这个错误:
无法识别的选择器发送到实例0x7f92f9694140
我做错了什么?
编辑:我注意到如果我直接在我调用.setButtonAction
的函数中初始化对象,但是我无法在同一个函数中声明,因为我在多种功能中需要它!
重新编辑:当我执行.addTarget
方法时,我想运行一个ViewController类的过程,但它运行的SubViewManager程序不存在,这就是错误的原因,但我不知道如何在外部类中调用.addTarget
时运行ViewController类过程。
答案 0 :(得分:2)
崩溃,因为在你的代码中,你设置为处理按钮动作事件的目标是SubViewManager实例(setButtonAction方法中的'self')
func setButtonAction(sender: UIButton!, buttonAction: Selector) {
button.addTarget(self, action: buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
}
但实现save函数的实际对象是ViewController类。
您可以尝试修改setButtonAction方法的参数,以传递将实现按钮操作的目标而不是未使用的 sender : UIButton!
,因为您已经调用了addButton方法并且已经将button属性指向它。
试试这样的事情
func setButtonAction(target: AnyObject! , buttonAction: Selector) {
button.addTarget(target, action: buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
}
然后在调用setButtonAction方法时传入viewController
newSubView.setButtonAction(self, buttonAction: "save")
其中self
是实现保存功能的ViewController类的实例。