如何解决问题的标签系统不起作用,因为交换更改仅发生在最后一个按钮上
按钮方法
@objc func buttonFuction(){
let stacView = UIStackView()
stacView.spacing = 12
stacView.distribution = .fillEqually
stacView.axis = .horizontal
stacView.translatesAutoresizingMaskIntoConstraints = false
view!.addSubview(stacView)
buttonNames = ["One","Two","Three","Four"]
for i in 0..<buttonNames.count{
index+=i
button = Button()
button.setTitle(buttonNames[i],for: .normal)
stacView.addArrangedSubview(button)
buttons.append(button)
button.tag = index
button.addTarget(self,action: selectors[i],for: .touchUpInside)
button.addTarget(self,action: selectorsColor[i],for: .touchDown)
}
NSLayoutConstraint.activate([stacView.centerXAnchor.constraint(equalTo: view!.centerXAnchor),stacView.centerYAnchor.constraint(equalTo: view!.centerYAnchor),stacView.widthAnchor.constraint(equalToConstant: 350),stacView.heightAnchor.constraint(equalToConstant:70)])
}
按钮处理方法
@objc func colorButton1(){
if button.tag == 0 {
button.backgroundColor = #colorLiteral(red: 0.1123025946,green: 1,blue: 0.03079073749,alpha: 1)
}
else {
button.backgroundColor = #colorLiteral(red: 0.7974829231,green: 0.09321228972,blue: 0.09321228972,alpha: 1)
}
}
@objc func colorButton2(){
if button.tag == 1 {
button.backgroundColor = #colorLiteral(red: 0.07117979832,green: 0.8973241221,blue: 0,alpha: 1)
}
else {
button.backgroundColor = #colorLiteral(red: 0.7312681945,green: 0.1133923198,blue: 0.06002510149,alpha: 1)
}
}
@objc func colorButton3(){
if button.tag == 2 {
button.backgroundColor = #colorLiteral(red: 0.1123025946,alpha: 1)
}
else {
button.backgroundColor = #colorLiteral(red: 0.6805654408,green: 0.1003367522,blue: 0.09689761347,alpha: 1)
}
}
@objc func colorButton4(){
if button.tag == 3 {
button.backgroundColor = #colorLiteral(red: 0.1123025946,alpha: 1)
}
else {
button.backgroundColor = #colorLiteral(red: 0.7620294414,green: 0.05229266211,blue: 0.09308676813,alpha: 1)
}
}
每次我按下按钮时,它都会将颜色更改为最后一个按钮,即使标记每个按钮后,颜色更改也仅发生在最后一个按钮中,并且不确定如何更改代码以允许颜色更改发生在其他按钮上按下时按钮。
提前致谢。
解决方法
正如我在评论中所说,buttons
数组包含 4 个项目,由于引用语义,它们都指向同一个实例,即最后添加的 Button
实例。 button
属性也是如此。
你需要这样的东西,它创建四个不同的 Button
实例并使用一个动作方法,我不知道第二个选择器是做什么的我注释掉了。
逻辑:sender
参数是刚被点击的按钮,首先将当前按钮除外的所有背景颜色设置为合适的红色,然后设置当前按钮的背景颜色到绿色。对按钮的引用取自 buttons
数组。
for i in 0..<buttonNames.count{
let button = Button()
button.setTitle(buttonNames[i],for: .normal)
stacView.addArrangedSubview(button)
buttons.append(button)
button.tag = i
button.addTarget(self,action: #selector(colorButton),for: .touchUpInside)
// button.addTarget(self,action: selectorsColor[i],for: .touchDown)
}
@objc func colorButton(_ sender : Button) {
let offColors = [#colorLiteral(red: 0.7974829231,green: 0.09321228972,blue: 0.09321228972,alpha: 1),#colorLiteral(red: 0.7312681945,green: 0.1133923198,blue: 0.06002510149,#colorLiteral(red: 0.6805654408,green: 0.1003367522,blue: 0.09689761347,#colorLiteral(red: 0.7620294414,green: 0.05229266211,blue: 0.09308676813,alpha: 1)]
for i in 0..<4 where i != sender.tag {
buttons[i].backgroundColor = offColors[i]
}
switch sender.tag {
case 0: sender.backgroundColor = #colorLiteral(red: 0.1123025946,green: 1,blue: 0.03079073749,alpha: 1)
case 1: sender.backgroundColor = #colorLiteral(red: 0.07117979832,green: 0.8973241221,blue: 0,alpha: 1)
case 2: sender.backgroundColor = #colorLiteral(red: 0.1123025946,alpha: 1)
case 3: sender.backgroundColor = #colorLiteral(red: 0.1123025946,alpha: 1)
default: break
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。