【问题标题】:Swift UIButton titleColor change when highlighted?Swift UIButton titleColor在突出显示时改变?
【发布时间】:2020-09-06 13:17:43
【问题描述】:

我想在用户点击按钮时更改我的 UIBUtton 的标题颜色,如果用户按住按钮,当前 UIBUtton 标题的颜色会发生变化,但是在快速点击时不会更改,您能否让我知道我需要在下面的代码中更改哪些内容才能仅在点击检测时更改 titleColor:

    var resetFiltersButton: UIButton = {
        
        let button = UIButton(type: .system)
        
        button.setTitle("Clear Filters", for: .normal)
                
        button.titleLabel?.font = UIFont(name: "AppleSDGothicNeo-Bold", size: 20)
        
        button.setTitleColor(.blue, for: .normal)
        
        button.setTitleColor(.red, for: .highlighted)
        
        button.titleLabel?.numberOfLines = 1
        
        button.tag = 1
        
        button.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside)
        
        button.translatesAutoresizingMaskIntoConstraints = false
        
        return button
        
    }()

   @objc func buttonPressed(_ sender: UIButton) {
        
        // MARK: - Clear Filters button pressed:
        
        if sender.tag == 1 {

}

}

【问题讨论】:

    标签: swift xcode colors uibutton title


    【解决方案1】:

    您为什么不尝试在 buttonPressed 函数中实现它?

    @objc func buttonPressed(_ sender: UIButton) {
            
    
          sender.setTitleColor(color: UIColorUI, for: UIControl.State)
    
    }
    

    【讨论】:

    • 我刚试了下还是一样的结果,太奇怪了!
    • 您是否尝试过更改按钮的类型? UIButton(type: .custom)
    • 是的,我又做了一次,颜色只有在我点击并按住而不是点击时才会改变。
    • 尝试更改操作并将 UITapGestureRecognizer 添加到按钮。这是一个解释stackoverflow.com/a/30859297/11974184的链接
    • 我刚刚在 viewDidLoad 中添加了一个 tapButtonGestureRecogniser 到我的 UIButton 并将目标更改为 buttonTapTriggered。但是,我仍然得到相同的结果。奇怪的是,当我点击按钮时,它需要执行的操作被触发,但是,不是 setColor 更改方法!
    【解决方案2】:

    这个问题是您将 setTitleColor 用于 .normal 和 .highlighted 状态。

    • .normal 是没有点击按钮的时候。
    • .highlighted 是在单击按钮时。

    相反,您可以:

    1. 刚刚更新了按下时的 .normal 颜色(在 buttonPressed 中);或
    2. setTitleColor for .selected for 单击后处理 buttonPressed 中的选择状态(添加 sender.isSelected = !sender.IsSelected)

    【讨论】:

    • 我厌倦了您的建议,因此我首先从按钮计算属性中删除了 highlightState 的 button.setTitleColor,并在 buttonPressed 方法中为关注的按钮添加了另一个 setTitleColor。这改变了 UIButton titleColor 的颜色,只要我点击它而不是必须点击并按住,但是现在当点击结束时颜色不会恢复到之前的颜色。
    • 我还尝试了第二种方法,即我将 highlightState 的 setTitleColor 修改为 .selected。在 buttonPressed 方法中,我添加了您的推荐 sender.isSelected = !sender.isSelected。现在,只要我点击按钮,按钮标题的颜色就会改变,但是,在我再次点击按钮之前,它不会恢复到以前的颜色。
    猜你喜欢
    • 2020-05-06
    • 2019-11-30
    • 1970-01-01
    • 2015-07-21
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多