You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift4中如何获取UIButton的默认与选中态文本颜色

动态提取UIButton状态文本颜色的简便方案

这个问题我之前也碰到过,硬编码色值确实太麻烦了——每次在Storyboard里修改按钮颜色后,还要同步更新代码里的色值变量,完全是重复劳动。其实咱们可以直接从UIButton的对应状态中动态提取颜色,这样就能和Storyboard的设置自动同步,再也不用手动维护色值了。

核心思路

UIButton本身就提供了titleColor(for:)方法,可以直接获取对应状态下的文本颜色。我们只需要在视图加载完成后,调用这个方法提取默认态(.normal)和选中态(.selected)的颜色,存入变量即可。

代码实现(Swift)

基础用法

假设你已经通过Storyboard给按钮添加了IBOutlet:

import UIKit

class YourViewController: UIViewController {
    // 关联Storyboard中的按钮
    @IBOutlet weak var targetButton: UIButton!
    
    // 存储颜色的变量
    private var defaultTitleColor: UIColor?
    private var selectedTitleColor: UIColor?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 从按钮状态中提取颜色
        defaultTitleColor = targetButton.titleColor(for: .normal)
        selectedTitleColor = targetButton.titleColor(for: .selected)
        
        // 后续就可以直接使用这两个变量了
        if let defaultColor = defaultTitleColor {
            print("默认态文本颜色:\(defaultColor)")
        }
        if let selectedColor = selectedTitleColor {
            print("选中态文本颜色:\(selectedColor)")
        }
    }
}

封装扩展(复用场景)

如果你的项目中有多个按钮需要提取状态颜色,可以封装一个UIButton的扩展,让代码更整洁:

extension UIButton {
    // 获取默认态文本颜色
    var normalTitleColor: UIColor? {
        return titleColor(for: .normal)
    }
    
    // 获取选中态文本颜色
    var selectedTitleColor: UIColor? {
        return titleColor(for: .selected)
    }
}

然后在ViewController中就能更简洁地调用:

override func viewDidLoad() {
    super.viewDidLoad()
    
    defaultTitleColor = targetButton.normalTitleColor
    selectedTitleColor = targetButton.selectedTitleColor
}

注意事项

  • 一定要在视图加载完成后提取颜色(比如viewDidLoad方法中),因为此时按钮已经从Storyboard完成初始化,状态颜色已经被正确设置。如果在init方法中提取,可能会拿到nil。
  • 如果按钮的状态颜色是通过UIAppearance全局设置的,这个方法同样适用,会正确获取到最终的颜色值。

这样一来,以后你在Storyboard中修改按钮的默认/选中态文本颜色时,代码中的变量会自动同步最新值,完全不用手动修改色值啦!

内容的提问来源于stack exchange,提问作者Bijender Singh Shekhawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:28