我正在使用需要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获取指定的名称?
答案 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。