Ios 从外部类添加目标

Ios 从外部类添加目标,ios,swift,Ios,Swift,我面临这个问题:我想为按钮创建的运行时分配一个操作,我正在使用这个自定义类: import UIKit class SubViewManager: NSObject { var button = UIButton() 然后我可以在视图中添加按钮: frame.addSubview(button) 以及分配操作的功能: func setButtonAction(sender: UIButton!, buttonAction: Selector) { button.addTarget(

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

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

我做错了什么

EDIT:我注意到,如果我在调用
.setButtoAction
的函数中直接初始化对象,它可以工作,但我不能在同一个函数中声明,因为我需要在多个函数中使用它


重新编辑:当我执行
.addTarget
方法时,我想运行ViewController类的过程,但它运行的子ViewManager过程不存在,这就是错误的原因,但是我不知道在外部类中调用
.addTarget
时如何运行ViewController类过程。

它会崩溃,因为在代码中,您设置用于处理按钮操作事件的目标是SubViewManager实例(“self”在SetButtoAction方法中)

但实现save函数的实际对象是ViewController类

您可以尝试修改setButtoAction方法的参数,以传递将实现按钮操作的目标,而不是未使用的
sender:UIButton
func setButtonAction(target: AnyObject! , buttonAction: Selector) {
    button.addTarget(target, action: buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
}
然后在调用SetButtoAction方法时传入viewController

newSubView.setButtonAction(self, buttonAction: "save")

其中,
self
是实现保存功能的ViewController类的实例。

它会崩溃,因为在代码中,您设置用于处理按钮操作事件的目标是SubViewManager实例(“self”在SetButtoAction方法中)

但实现save函数的实际对象是ViewController类

您可以尝试修改setButtoAction方法的参数,以传递将实现按钮操作的目标,而不是未使用的
sender:UIButton
func setButtonAction(target: AnyObject! , buttonAction: Selector) {
    button.addTarget(target, action: buttonAction, forControlEvents: UIControlEvents.TouchUpInside)
}
然后在调用SetButtoAction方法时传入viewController

newSubView.setButtonAction(self, buttonAction: "save")

其中
self
是实现save函数的ViewController类的实例。

您的
save()
函数在哪里?在ViewController类中,它是
private
吗?还是有什么论据?请使用函数签名更新OP。我更新答案,阅读编辑,并告诉我是否需要更多信息。ViewController Classis中的
private
函数是什么?还是有什么论据?请用函数签名更新OP。我更新答案,请阅读编辑并告诉我是否需要更多信息