swift - Swift:按下时更改按钮的样式并重置其他按钮
问题描述
所以我有这些按钮(3 叠 6 个,所以 18 个),我想要实现的是当我按下这些按钮之一时:
边框颜色和文本颜色更改
其他按钮重置为正常样式
但我不想通过“isEnabled”技巧禁用其他人(我在这里只找到了涉及 isEnabled 的解决方案),我仍然希望它们被启用,我只是希望它们不被我的自定义样式“突出显示”当一个被按下。
对于第一部分,这只是我在 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)
}
这一小部分仅用于 1 个按钮,但我想如果我有 18 个按钮,我应该创建一个类或结构,而不是在每个 IBAction 中复制它??还是一个函数?
然后对于第二部分,我不知道该怎么做,当按下一个按钮时,返回到其他按钮的原始属性(在属性检查器中设置)。直观地说,我确信它是一个函数内所有 18 个按钮的数组的组合,该函数将遍历所有数组,并且可能在每个按钮上创建一个 bool 以检查它们是否被按下,但我真的不知道语法是怎样的......
还值得注意的是,如果我在同一个按钮上按两次,我不希望它恢复其原始属性,而是保持“按下”样式。
提前致谢 !
解决方案
定义 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.layoutIfNeeded()
推荐阅读
- c# - Docusign - 如何将文档发送给多个签名者并让他们通过 API 在文档上签名
- javascript - 创建用于展开和折叠 Accordion 的切换按钮
- google-bigquery - 如果我在流式传输之前先删除表并创建表,Google BigQuery Streaming 有时会失败
- sql-server - 将旧版 FlashFiler2 数据库镜像到 SQL Server
- javascript - Twilio 可编程聊天 - 从 JS 客户端断开连接
- java - Eclipse 提供 java 8 支持错误不会启动
- anaconda - 从 Anaconda 或作为 JuliaPro 的一部分安装 Julia
- yii2 - Yii2 - 键值不起作用
- cloudkit - Cloudkit 生产记录消失
- angular - 嵌套表格 | 角度 6