突出显示被按下的按钮,突出显示未按下的按钮SWIFT

问题描述 投票:1回答:2

我有三个按钮连接到相同的IBAction。他们都有自己的外表。我发现了如何使按钮在按下时变为突出显示,而在用户按下另一个按钮时不突出显示。他们是编写代码的更好方法吗?这是我正在使用的:

@IBAction func tipChanged(_ sender: UIButton) {
    zeroPCTButton.isSelected = false 
    tenPCTButton.isSelected = false 
    twentyPCTButton.isSelected = false 
    sender.isSelected = true
}

之所以问,是因为我可以创建一个具有上千个按钮的应用程序,而我又不想使暴力声明成千上万次

swift uibutton highlight
2个回答
0
投票

我们可以通过以下方式取消突出未按下的UIButton

@IBAction func buttonAction(_ sender: Any) {

        let the_tag = (sender as AnyObject).tag;
        let button = self.view.viewWithTag(the_tag!) as? UIButton
        button?.isSelected = true
        button?.backgroundColor = UIColor.white
        button?.setTitleColor(UIColor.black, for: .normal)

        // Create a list of all tags
        let allButtonTags = [1, 2, 3, 4, 5]
        let currentButtonTag = (sender as AnyObject).tag

           allButtonTags.filter { $0 != currentButtonTag }.forEach { tag in
               if let button = self.view.viewWithTag(tag) as? UIButton {
                   // Deselect/Disable these buttons
                   button.backgroundColor = #colorLiteral(red: 0.80803, green: 0.803803, blue: 0.805803, alpha: 1)
                   button.setTitleColor(UIColor.darkGray, for: .normal)
                   button.isSelected = false

               }
           }
    }

0
投票

让我们想象一下,您有1000个按钮,您需要实现一些循环以执行所有与按钮相关的操作(创建,添加约束,单击事件)。创建UIButton数组以存储按钮。

var buttons:[UIButton] = []

创建按钮时将按钮添加到此数组中

for buttonIndex in 1...1000 {
    // your other stuff to create, add constraints to button
    button.tag = buttonIndex
    buttons.append(button)
}

现在您可以轻松实现目标。

@IBAction func tipChanged(_ sender: UIButton) {
    buttons.forEach({$0.isSelected = $0.tag == sender.tag})
    view.layoutIfNeeded()
}
© www.soinside.com 2019 - 2024. All rights reserved.