我制作了一个UIView组件,里面有2个按钮。当用户触摸按钮时,我需要调用ViewController的动作方法。
我试图传递选择器,但它崩溃了:
ViewController上的
var subtraction = false
@IBAction func buttonAction(_ sender: UIButton) {
var change = sender.tag
if subtraction {
change = change * (-1)
subtraction = false
}
number = number + change
Score.text = String(number)
}
@IBAction func foulButton(_ sender: UIButton) {
subtraction = !subtraction
}
在Component.swift上
component.leftAction = #selector(ViewController.myAction)
func myAction(sender: UIButton!) {
print("tapped!")
}
我该怎么做?
答案 0 :(得分:2)
因为按钮目标错误而崩溃。在您的情况下,您将目标作为public class MyExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {
action = "UserLogOut",
controller = "User",
area = "User"
}));
}
类的实例self
传递。目标必须是您的Component
实例,因为您的选择器是在ViewController
类中定义的。
你可以做这样的事情来解决你的问题。
ViewController
并像这样使用它。
public var leftTargetAction: (Any, Selector)? {
didSet {
if let targetAction = leftTargetAction {
self.leftButton.addTarget(targetAction.0, action: targetAction.1, for: .touchUpInside)
}
}
}
答案 1 :(得分:0)
更好的方法是与代表处理这个问题。 要了解有关委托的更多信息,您可以go through this post。
答案 2 :(得分:0)
只需更改
component.leftAction = #selector(ViewController.myAction(sender:))
到
ViewController
var myApp = [];
myApp.set = function(VAL) {
myApp.push({id : VAL});
}
不应被解除分配。