突出显示被按下的按钮并取消突出显示未按下的按钮 SWIFT

Posted

技术标签:

【中文标题】突出显示被按下的按钮并取消突出显示未按下的按钮 SWIFT【英文标题】:Highlighting a button that gets pressed and unhighlighting the non pressed buttons SWIFT 【发布时间】:2020-08-22 06:03:10 【问题描述】:

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

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

我问的原因是因为我可以制作一个具有一千个按钮的应用程序,并且我不想暴力声明数千次

【问题讨论】:

【参考方案1】:

我们可以通过以下方式取消突出显示未按下的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

               
           
    

【讨论】:

【参考方案2】:

假设您有 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()

【讨论】:

以上是关于突出显示被按下的按钮并取消突出显示未按下的按钮 SWIFT的主要内容,如果未能解决你的问题,请参考以下文章

点击时突出显示 tableview 单元格,按下警报控制器操作按钮时取消突出显示

从 UIButton 按下处理程序获取关联 UIView 的最简洁方法

使用javascript按下开始按钮时,我应该如何突出显示textarea中的文本?

按钮停止上的按下(波纹)动画

表格中的 WKInterfaceGroup 突出显示包含按下时的按钮

如何在nib文件中按下时禁用UIButton高亮显示?