当前位置: 首页 > 知识库问答 >
问题:

Swift:按下按钮时更改按钮样式,并重置其他按钮

蓬威
2023-03-14

所以我有这些按钮(3叠6个,18个),我想实现的是当我按下其中一个按钮时:

>

  • 边框颜色

    其他按钮将重置为其正常样式

    但是我不想通过“isEnable”技巧禁用其他的(我只在这里找到了涉及isEnable的解决方案),我仍然希望它们被启用,我只是希望它们不要在按下时被我的自定义样式“突出显示”。

    对于第一部分,也就是我在IBAction中所做的造型:

    @IBAction func preset1Pressed(_ sender: UIButton) {
        preset1.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
        preset1.layer.borderWidth = 0.42
        preset1.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
    }
    

    这一小部分只是一个按钮,但我想如果我有18个按钮,我应该创建一个类或结构,而不是在每个iAction中复制它??还是func?

    然后,对于第二部分,我不确定该如何操作,当按下一个按钮时,会反转到其他按钮的原始属性(在属性检查器中设置)。直观地说,我确信这是一个函数中所有18个按钮的数组的组合,它将循环通过所有数组,并可能对每个按钮进行布尔运算,以检查它们是否被按下,但我真的不知道语法会是什么。。。

    还值得注意的是,如果我在同一按钮上按两次,我不希望它反转为其原始属性,而是保持“按下”样式。

    提前感谢!

  • 共有2个答案

    訾高明
    2023-03-14

    因此,Dilan本身并没有完全解决它,尽管我对它进行了实验,它实际上帮助我解决了它,除了我做了以下修改

    我创建了一系列按钮(称为presetsArray)并对它们进行了标记。然后,我创建了一个在所有iAction中调用的函数,但作为发送方调用。标记不起作用。我是这样计算函数的:

    func styleButtons(tag: Int) {
            let tag = tag
            presetsArray.forEach{ (button) in
                if button.tag == tag {
                    button.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
                    button.layer.borderWidth = 0.42
                    button.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
                    view.layoutIfNeeded()
                } else {
                    button.layer.borderColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
                    button.setTitleColor(#colorLiteral(red: 0.4978774786, green: 0.5020093918, blue: 0.5019439459, alpha: 1), for: .normal)
                }
            }
        } 
    

    然后在预置X的每个IBAction中,我会这样调用它:

    styleButtons(tag: presetX.tag)
    

    在我的函数的else部分中,view.layoutIfNeeded()不会返回到我的原始样式,我只是使用了颜色选择器并选择了我的原始样式,我觉得这不是最合法的方式,但它很有效!

    非常感谢蓝迪的帮助。

    汪信鸥
    2023-03-14

    定义UIButton数组并在将其作为按钮标记添加到stack.set索引时添加按钮(0-17)

    fileprivate var btnArray:[UIButton] = []
    
    btn0.tag = 0
    btnArray.appent(btn0)
    

    然后,您可以像这样更改按钮单击功能中的样式

        @IBAction func preset1Pressed(_ sender: UIButton) {
    
           btnArray.forEach { (button) in
                if button.tag == sender.tag {
                    preset1.layer.borderColor = #colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1)
                    preset1.layer.borderWidth = 0.42
                    preset1.setTitleColor(#colorLiteral(red: 0.4095217415, green: 0.6107917746, blue: 0.2774988226, alpha: 1), for: .normal)
                    view.layoutIfNeeded()
                }else{
                    //add default style
                    view.layoutIfNeeded()
                }
            }
        }
    

    不要在此之后添加 view.layoutIfRequired()

     类似资料:
    • '导出默认函数 评级(道具){ 常量 [悬停,setHover] =使用状态(假); // 检查悬停状态常量 [com, setCom] = use 状态(假); //检查点击状态 }'我有五个评级按钮,我想在单击另一个按钮时取消单击已单击的按钮。通过点击我的意思是,当我点击其中一个按钮时,他们的样式主要改变为背景颜色,现在我希望当有人按下另一个评级时,我希望以前点击的按钮的样式恢复正常,新按下的

    • 问题内容: 我希望我的应用程序中的按钮样式在按下时可以更改。做这个的最好方式是什么? 问题答案: 使用。 这里是一个例子:

    • } 完整错误消息:

    • 问题内容: 可以更改按钮功能吗? 例如 点击,再点击一次 我已经尝试过类似,但没有结果。 我设法使叠加工作并在其中插入所需的数据。但是没有找到任何可以帮助我的帖子。我正在使用react-bootstrap。这是我的代码。 问题答案: 您可以尝试使用状态来存储颜色。也许这会让您想到解决问题的方法: 这是一个小提琴。

    • 我以编程方式生成了许多按钮(一些按钮用于增加值,而另一些按钮用于减少值),当它们调整的值达到最大值或最小值时,我会禁用这些按钮。(即,当达到最大值时,“增加”按钮被禁用,而当达到最小值时,“减少”按钮被禁用。)除了禁用,我还将按钮状态设置为“按下”,以直观地指示已达到极限值,并且按钮不再工作。 我的按钮onClickListener的'增加'按钮看起来像这样: ClickListeners上相应的

    • 我是一个新手,我正在尝试创建一个应用程序来在我的投资组合中使用。本质上,该程序是一个可以访问不同菜单的菜单(json文件:texas_pick.js,Breakth.js…),该程序旨在以按钮的形式显示菜单选项,按钮的详细信息从各自的json文件中检索。我面临的问题是,单击菜单选项时,会检索最后一个菜单项的数据。我将后端编程为只将商品名称和价格推送到数据库,而前端则检索这些数据并将其显示在表上。检