Swift:让按钮工作

Swift: Getting a Button to work

我在 viewDidLoad() 函数中创建了两个按钮:

    buttonZ.frame = CGRectMake(0, 20, 100, 50)
    buttonZ.backgroundColor = UIColor.greenColor()
    buttonZ.setTitle("Zurück", forState: UIControlState.Normal)
    buttonZ.addTarget(self, action: "buttonZAction:", forControlEvents: UIControlEvents.TouchUpInside)
    self.view.addSubview(buttonZ)

    buttonV.frame = CGRectMake(screenBreite - 100, 20, 100, 50)
    buttonV.backgroundColor = UIColor.greenColor()
    buttonV.setTitle("Vorwärts", forState: UIControlState.Normal)
    buttonV.addTarget(self, action: "buttonVAction:", forControlEvents: UIControlEvents.TouchUpInside)
    self.view.addSubview(buttonV)

viewDidLoad()之外我实现了两个函数buttonZAction()buttonVAction()

    func buttonZAction(){
    if(level - 1 >= 1){
        level = level - 1
        spielfeldChooser()
    }
}

func buttonVAction(){
    if(level + 1 <= maxLevel){
        level = level + 1
        spielfeldChooser()
    }
}

当我点击这些按钮时出现问题。某处出现异常,我没有捕捉到(我只是包含了错误的主要部分)。

`*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[Pushy_2_0.ViewController buttonVAction:]:无法识别的选择器发送到实例 0x15db5410'

我希望你能帮助我。

你有 "buttonZAction:" 这意味着你的选择器应该接收一个参数。如果您不通过它们,请更改这些行:

buttonZ.addTarget(self, action: "buttonZAction:", forControlEvents: UIControlEvents.TouchUpInside)
buttonV.addTarget(self, action: "buttonVAction:", forControlEvents: UIControlEvents.TouchUpInside)

收件人:

buttonZ.addTarget(self, action: "buttonZAction", forControlEvents: UIControlEvents.TouchUpInside)
buttonV.addTarget(self, action: "buttonVAction", forControlEvents: UIControlEvents.TouchUpInside)

您的选择器有参数。但是你没有在函数 buttonZAction 中声明这个参数 像这样

func buttonZAction(sender: UIButton!){
    if(level - 1 >= 1){
        level = level - 1
        spielfeldChooser()
    }
}

func buttonVAction(sender: UIButton!){
if(level + 1 <= maxLevel){
    level = level + 1
    spielfeldChooser()
}
}

您在表示操作方法名称的字符串末尾添加了“:”,后者没有输入参数。不要误会,最好像这样使用选择器 class:

buttonV.addTarget (self, Action: Selector (buttonVAction ()), forControlEvents: UIControlEvents.TouchUpInside)