来自外部类的addTarget

时间:2016-02-23 18:20:46

标签: ios swift

我正面临这个问题:我想为按钮创建的运行时分配一个动作,我使用这个自定义类:

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类过程。

1 个答案:

答案 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类的实例。