@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开发将不胜感激。谢谢。
答案 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类型推断。