如何以编程方式创建多个按钮和操作?

时间:2016-09-16 14:57:30

标签: ios swift uibutton swift3

我使用的是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()
}

我得到了这么远,但是当点击按钮时崩溃了。

2 个答案:

答案 0 :(得分:0)

使用button.tag区分按钮。 redUIColor的属性,因此您可以访问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..