如何在Swift 4中获取按钮值?

时间:2018-07-31 16:13:35

标签: ios swift

    @IBOutlet var button: UIButton!    
    func randomize(){
        var x_axis:CGFloat = 8.0
        var y_axis:CGFloat = 330.0
        for selected_Synonym in selected_Synonyms {
            button = UIButton.init(type: UIButtonType.custom) as UIButton
            button.frame = CGRect(x: x_axis, y: y_axis, width: 400, height: 50)
            button.backgroundColor = UIColor.black
            button.setTitle(selected_Synonym as? String, for: UIControlState.normal)
            button.setTitleColor(UIColor.white, for: [])
            button.addTarget(self, action: Selector(("pressed:")), for: UIControlEvents.touchUpInside)
            self.view.addSubview(button)
            x_axis = 10.0
            y_axis += 70.0
        }
    }

    func pressed(sender: Any){
        let buttonTitle = button.currentTitle
        print(buttonTitle)
    }

但是,当它运行并按一个按钮时,出现以下错误:

  

线程1:信号SIGABRT。

程序创建5个按钮。我是Swift的新手,如果有人可以帮助我,iOS开发将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

您有几个问题。要解决崩溃问题,请将Selector(("pressed:"))替换为#selector(pressed)Selector的使用已过时。始终使用#selector

接下来,删除@IBOutlet var button: UIButton!行。您不需要它。

然后更改:

button = UIButton.init(type: UIButtonType.custom) as UIButton

收件人:

let button = UIButton(type: .custom)

然后将您的pressed函数更新为:

@objc func pressed(sender: UIButton){
    let buttonTitle = sender.currentTitle
    print(buttonTitle)
}

请注意添加了@objc。这是目标/选择器使用的任何功能所必需的。另请注意,sender现在是UIButton,而不是Any。最好将发送者的类型设置为匹配正确的类型。

这是您所有的代码,其中包含许多小错误:

func randomize() {
    var xAxis: CGFloat = 8.0
    var yAxis: CGFloat = 330.0

    for selectedSynonym in selectedSynonyms {
        let button = UIButton(type: .custom)
        button.frame = CGRect(x: xAxis, y: yAxis, width: 400, height: 50)
        button.backgroundColor = .black
        button.setTitle(selectedSynonym, for: .normal)
        button.setTitleColor(.white, for: .normal)
        button.addTarget(self, action: #selector(pressed), for: .touchUpInside)
        self.view.addSubview(button)
        xAxis = 10.0
        yAxis += 70.0
    }
}

@objc func pressed(sender: UIButton){
    let buttonTitle = sender.currentTitle
    print(buttonTitle)
}

在命名变量和函数时,请使用camelCase,而不要使用snake_case。利用Swift类型推断。