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

Button为enabled=false状态时如何获取其默认背景色和文本色

按钮不同状态展示

获取UIButton禁用状态默认颜色的方案

以下针对iOS平台的UIButton给出通用解决方案:

文本色获取(全系统版本通用)

直接调用UIButton的内置状态查询方法即可,无需额外处理:

let disabledTitleColor = button.titleColor(for: .disabled)

如果是自定义按钮单独设置了富文本标题,可通过attributedTitle(for: .disabled)读取对应富文本中的颜色属性。

背景色获取

分两种情况处理:

1. 自定义过按钮不同状态的背景

如果提前通过setBackgroundImage(_:for:)等方法为.disabled状态单独设置了背景,直接调用对应读取方法即可:

let disabledBgImage = button.backgroundImage(for: .disabled)

你也可以直接将颜色生成背景图设置给对应状态,后续读取时可反向解析出颜色值。

2. 未自定义的系统默认按钮

系统默认样式的UIButton没有直接暴露禁用状态的背景色属性,可通过实时渲染视图的方式获取当前实际显示的背景色:

// 先将按钮切换到禁用状态
button.isEnabled = false

// 渲染按钮当前状态为图片
UIGraphicsBeginImageContextWithOptions(button.bounds.size, false, UIScreen.main.scale)
guard let context = UIGraphicsGetCurrentContext() else { return }
button.layer.render(in: context)
let renderImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

// 读取按钮中心位置的像素色,即为禁用状态的背景色
let disabledBgColor = renderImage?.getPixelColor(at: CGPoint(x: button.bounds.midX, y: button.bounds.midY))

附:UIImage读取像素色的常见扩展实现:

extension UIImage {
    func getPixelColor(at point: CGPoint) -> UIColor? {
        guard let cgImage = cgImage,
              let dataProvider = cgImage.dataProvider,
              let pixelData = dataProvider.data else { return nil }
        let data = CFDataGetBytePtr(pixelData)
        let pixelInfo = Int((size.width * point.y + point.x)) * 4
        let red = CGFloat(data?[pixelInfo] ?? 0) / 255.0
        let green = CGFloat(data?[pixelInfo + 1] ?? 0) / 255.0
        let blue = CGFloat(data?[pixelInfo + 2] ?? 0) / 255.0
        let alpha = CGFloat(data?[pixelInfo + 3] ?? 0) / 255.0
        return UIColor(red: red, green: green, blue: blue, alpha: alpha)
    }
}

iOS 15+ 使用UIButton.Configuration的情况

如果你的项目适配最低版本为iOS 15,使用了新增的Configuration样式配置按钮,可直接从配置中读取对应状态的颜色属性:

guard let config = button.configuration else { return }
let disabledTitleColor = config.titleTextAttributesTransformer?.transform(.init()).foregroundColor
let disabledBgColor = config.background.backgroundColorTransformer?.transform(.init(for: .disabled))

内容的提问来源于stack exchange,提问作者Abdulsamet Kılınçarslan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:00:01