如何对组件中按下的按钮执行操作 viewcontroller

How to get action on button pressed in a component to viewcontroller

我做了一个UIView组件,里面有2个按钮。当用户触摸按钮时,我需要调用 ViewController.

的操作方法

我试图传递一个选择器,但它崩溃了:

于 ViewController

component.leftAction = #selector(ViewController.myAction)

func myAction(sender: UIButton!) {
    print("tapped!")
}

于 Component.swift

public var leftAction: Selector? {
    didSet {
        if (leftAction != nil){
            self.leftButton.addTarget(self, action: leftAction!, for: .touchUpInside)
        }
    }
}

我该怎么做?

更好的方法是通过代表来处理这个问题。 要了解有关委托的更多信息,您可以 go through this post

改变一下

component.leftAction = #selector(ViewController.myAction)

component.leftAction = #selector(ViewController.myAction(sender:))

并且 ViewController 不应被释放。

它正在崩溃,因为按钮目标是错误的。在您的情况下,您将目标作为 self 传递,它是 Component class 的一个实例。目标必须是您的 ViewController 实例,因为您的选择器是在您的 ViewController class 中定义的。

您可以执行类似的操作来解决您的问题。

public var leftTargetAction: (Any, Selector)? {
    didSet {
        if let targetAction = leftTargetAction {
            self.leftButton.addTarget(targetAction.0, action: targetAction.1, for: .touchUpInside)
        }
    }
}    

并像这样使用它。

component.leftTargetAction = (self,#selector(ViewController.myAction))