通过Swift 4中的for循环创建具有唯一名称的按钮

时间:2018-05-09 10:35:17

标签: uibutton

我正在使用需要45个按钮的复杂UI构建应用程序。出于各种原因,我没有使用Interface Builder。为了更新特定按钮的属性,我需要每个按钮都有一个唯一的名称,(Btn1,Btn2,Btn3 ...)这是我正在使用的代码:

let buttonsArray = ["Btn1",  "Btn2",  "Btn3",  "Btn4",  "Btn5",  "Btn6",
                    "Btn7",  "Btn8",  "Btn9",  "Btn10", "Btn11", "Btn12",
                    "Btn13", "Btn14", "Btn15", "Btn16", "Btn17", "Btn18",
                    "Btn19", "Btn20", "Btn21", "Btn22", "Btn23", "Btn24",
                    "Btn25", "Btn26", "Btn27", "Btn28", "Btn29", "Btn30",
                    "Btn31", "Btn32", "Btn33", "Btn34", "Btn35", "Btn36"]
for button in buttonsArray  {
    let button = UIButton(frame: CGRect(x: nextx, y: nexty, width: btnsiz, height: btnsiz))
    button.isUserInteractionEnabled  = true
    button.alpha = 0.05
    button.tag = tagnum
    tagnum += 1
    button.backgroundColor = UIColor(red: 0.997, green: 0.645, blue: 0.014, alpha: 1.0)
    button.setTitle(notesarray[count], for: .normal)
    button.setTitleColor(UIColor.black, for: .normal)
    button.layer.cornerRadius = 0.5 * button.bounds.size.width
    button.clipsToBounds = true
    button.backgroundColor = UIColor(red: 0.991, green: 0.607, blue: 0.33, alpha: 1.0)
    button.addTarget(self, action: #selector(btnPressed), for: .touchUpInside)
    self.view.addSubview(button)
    btnarray[count] = false
    setNextX()
    element += 1
    count += 1
} 

按下按钮时,会识别出该按钮。我已经分配了一个唯一的标签号。我希望能够根据按钮名称(Btn1)更新属性,例如: Btn1.isUserInteractionEnabled = true。我收到错误消息"使用未经过回复的标识符' Btn1'。如何在Interface Builder中使用IBOutlet获取指定的名称?

1 个答案:

答案 0 :(得分:0)

我担心IBOutlets只是Interface Builder的东西 - 因此名称为'IBOutlet'的'IB'。

如果要获取对视图子视图的引用,可以使用UIView tag属性。我看到你已经在使用这个标签属性,传递它'tagnum',它看起来像每个按钮增加,类似于ButtonsArray中的名字。

例如,如果您想获得带有标签1的按钮,您可以这样请求:

let Btn1 = self.view.viewWithTag(1)

然后你可以做你的建议:

Btn1.isUserInteractionEnabled = true

除此之外,我建议您将变量命名为以小写字母开头follow best practices

  

遵循案例约定。类型和协议的名称是   UpperCamelCase。其他一切都是lowerCamelCase。