Swift 如何将组件中按下的按钮的操作转到viewcontroller
我制作了一个UIView组件,里面有两个按钮。当用户触摸按钮时,我需要调用ViewController的动作方法 我试图传递选择器,但它崩溃了: 在ViewController上Swift 如何将组件中按下的按钮的操作转到viewcontroller,swift,uiviewcontroller,custom-controls,Swift,Uiviewcontroller,Custom Controls,我制作了一个UIView组件,里面有两个按钮。当用户触摸按钮时,我需要调用ViewController的动作方法 我试图传递选择器,但它崩溃了: 在ViewController上 component.leftAction = #selector(ViewController.myAction) func myAction(sender: UIButton!) { print("tapped!") } 关于斯威夫特 public var leftAction: Selector? {
component.leftAction = #selector(ViewController.myAction)
func myAction(sender: UIButton!) {
print("tapped!")
}
关于斯威夫特
public var leftAction: Selector? {
didSet {
if (leftAction != nil){
self.leftButton.addTarget(self, action: leftAction!, for: .touchUpInside)
}
}
}
我该怎么做?更好的方法是与学员一起处理此问题。
要了解更多关于委派的信息,您可以 更好的方法是与学员一起处理此问题。 要了解更多关于委派的信息,您可以 改变一下
component.leftAction = #selector(ViewController.myAction)
到
和ViewController
不应解除分配。只需更改即可
component.leftAction = #selector(ViewController.myAction)
到
和
ViewController
不应解除分配。它崩溃了,因为按钮目标错误。在您的例子中,您将目标作为self
传递,它是组件
类的一个实例。目标必须是ViewController
实例,因为选择器是在ViewController
类中定义的
你可以这样做来解决你的问题
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))
它崩溃了,因为按钮目标错了。在您的例子中,您将目标作为
self
传递,它是组件
类的一个实例。目标必须是ViewController
实例,因为选择器是在ViewController
类中定义的
你可以这样做来解决你的问题
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))
您使用的是什么Swift版本?在Swift3中,选择器语法已更改。它需要是选择器(ViewController.myAction)@DávidPászor反正它崩溃了:“无法识别的选择器发送到实例”为什么不直接将目标添加到按钮而不是通过选择器变量传递呢?选择器(myAction)呢?您确定您的类名为
ViewController
?您使用的是什么Swift版本?在Swift3中,选择器语法已更改。它需要是选择器(ViewController.myAction)@DávidPászor反正它崩溃了:“无法识别的选择器发送到实例”为什么不直接将目标添加到按钮而不是通过选择器变量传递呢?选择器(myAction)呢?您确定您的类被称为ViewController
?