我使用的是Swift 3.0。我正在尝试生成按钮的动态网格,我如何以编程方式为每个生成的按钮提供唯一标识符
let button = UIButton(type: .system)
@IBOutlet weak var attendanceView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
var xvalue = 8;
var yvalue = 17;
var button = UIButton();
for _ in 0..<5{
for _ in 0..<5{
button = UIButton(frame: CGRect(x: xvalue, y: yvalue, width: 50 , height: 50))
button.backgroundColor = .red()
button.addTarget(attendanceView, action: #selector(buttonAction), for: .touchUpInside)
self.attendanceView.addSubview(button)
xvalue = xvalue + 72;
}
xvalue=8;
yvalue = yvalue + 60;
}
}
func buttonAction(sender: UIButton!) {
button.backgroundColor = UIColor.green()
}
我得到了这么远,但是当点击按钮时崩溃了。
答案 0 :(得分:0)
使用button.tag
区分按钮。 red
是UIColor
的属性,因此您可以访问UIColor.red
。所以将你的for循环调整到那个
for i in 0..<5 {
for i in 0..<5 {
button = UIButton(frame: CGRect(x: xvalue, y: yvalue, width: 50 , height: 50))
button.backgroundColor = .red
button.addTarget(attendanceView, action: #selector(buttonAction), for: .touchUpInside)
button.tag = i
self.attendanceView.addSubview(button)
}
}
并在buttonAction()
中使用.tag
:
func buttonAction(sender: UIButton!) {
switch (sender.tag){
case 0:
//button 0 action
case 1:
//button 1 action
case 2:
//button 2 action
case 3:
//button 3 action
case 4:
//button 4 action
default:
//default
}
}
答案 1 :(得分:0)
我的两分钱:我认为使用这样的摩卡按钮会与不同尺寸和设备发生冲突。更好地使用集合。 无论如何使用tag属性是正确的方法。使用某种公式的awn很好,例如:
表示0中的r ..&lt; 10 { for c in 0 ..&lt; 20 { let tag = 1 +(r * 30)+ c
这样你应该有不同的no-ovrlapping标签。
在回电中:
func buttonAction(sender: UIButton!) {
let tag = sender.tag
let row = tag % 30 // modulus...
let col = tag - row * 30...
or similar..