swift - 问题的标签系统不起作用,因为交换更改仅发生在最后一个按钮上
问题描述
按钮方法
@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, green: 1, blue: 0.03079073749, 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, green: 1, blue: 0.03079073749, 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, alpha: 1),
#colorLiteral(red: 0.6805654408, green: 0.1003367522, blue: 0.09689761347, alpha: 1),
#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, green: 1, blue: 0.03079073749, alpha: 1)
case 3: sender.backgroundColor = #colorLiteral(red: 0.1123025946, green: 1, blue: 0.03079073749, alpha: 1)
default: break
}
}
推荐阅读
- fluentui-react - 带空格键的 DetailsList 的多项选择
- php - 我陷入警告:require_once(C:\xampp\htdocs\test04/vendor/composer/autoload.php): 和致命错误:未捕获的错误:类“Mpdf\Mpdf”
- swift - 如何在同一个孩子中添加用户电话号码作为电子邮件?
- python - 我怎样才能把字符串装进毫升?因为它说我不能将字符串转换为浮点数?
- python - 带有 django 的 Apache 服务器说:用户 'root'@'localhost' 的访问被拒绝
- date - Logstash:如何在日期过滤器模式中匹配时区 ID“CET”?
- python - 如何在没有继承的情况下将值从一个类传递到另一个类?
- python - 我得到 AttributeError: module 'pandas' has no attribute 'DataFrame' when using pd.DataFrame
- multithreading - Delphi:初学者的多线程帮助
- python - 如何编写程序来在 python 中找到 AAB +BB =BAA 的 A、B 答案?