如何对组件中按下的按钮执行操作 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))
我做了一个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))