Swift:当按下按钮时更改按钮样式并重设其他按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
}
}
}
此后不要frogot添加view.layoutIfNeeded()
所以建议Dilan不能完全自己解决它,尽管我进行了试验,但实际上我做了些修改,但实际上它帮助我解决了问题:
我创建了我的按钮数组(称为预置数组)并标记了它们。然后,我创建了一个在所有IBAction中都要调用的函数,但是由于sender.tag无法正常工作,因此这是我设计该函数的方式:
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)
在我函数的其他部分中,view.layoutIfNeeded()不会退回到我的原始样式,我只是去了颜色选择器并选择了原始样式,这不是我感觉到的最合法的方法,但是它可以工作!
非常感谢Dilan的帮助。
以上是关于Swift:当按下按钮时更改按钮样式并重设其他按钮的主要内容,如果未能解决你的问题,请参考以下文章