如何在组件中按下按钮对viewcontroller进行操作

时间:2017-07-26 08:27:52

标签: swift uiviewcontroller custom-controls

我制作了一个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!")
}

我该怎么做?

3 个答案:

答案 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}); }不应被解除分配。