微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

问题的标签系统不起作用,因为交换更改仅发生在最后一个按钮上

如何解决问题的标签系统不起作用,因为交换更改仅发生在最后一个按钮上

按钮方法

@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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?