【问题标题】:Retrieving default UI colors on iPhone检索 iPhone 上的默认 UI 颜色
【发布时间】:2011-02-16 19:35:27
【问题描述】:

前言:自从 iOS 13 采用深色主题以来,iOS 上就有了正确的系统颜色概念。请参阅UIColor 类。


这是我的 iPhone 项目,其中包含一个带有常规 UIButton 的 XIB 文件。该按钮具有文本颜色 - 一种漂亮的蓝色阴影,准确地说是 RGB(50, 79, 133)。

是否有一种快速且正确的方法可以在运行时检索该颜色值?不是这个特定按钮的颜色,而是 UIButtons 的默认文本颜色?最好是UIColor *CGColorRef

iPhone 上是否有系统颜色的概念,或者这只是 Interface Builder 中的预设强制执行的默认值?

是的,我可以做一些基本的数学运算并将 RGB 转换为 UIColor 使用的浮点 (UGH!) 表示。还有比这更优雅的吗?

【问题讨论】:

    标签: iphone cocoa-touch uicolor


    【解决方案1】:

    对于 UIColor 问题,我建议给 UIColor 添加一个类别,如下所示:

    UIColor+Extras.h

    #import <UIKit/UIKit.h>
    
    @interface UIColor(Extras)
    + (UIColor *)colorWithRGBA:(NSUInteger) rgba;
    + (UIColor *)colorWithRGB:(NSUInteger) rgb;
    @end
    

    UIColor+Extras.m

    #import "UIColor+Extras.h"
    
    @implementation UIColor(Extras)
    + (UIColor *)colorWithRGBA:(NSUInteger) rgba
    {
        return [UIColor colorWithRed:(rgba >> 24) / 255.0f green:(0xff & ( rgba >> 16)) / 255.0f blue:(0xff & ( rgba >> 8)) / 255.0f alpha:(0xff & rgba) / 255.0f];
    }
    
    + (UIColor *)colorWithRGB:(NSUInteger) rgb
    {
        return [UIColor colorWithRed:(rgb >> 16) / 255.0f green:(0xff & ( rgb >> 8)) / 255.0f blue:(0xff & rgb) / 255.0f alpha:1.0];
    }
    @end
    

    这会让你写出[UIColor colorWithRGBA:0xFF00FFFF][UIColor colorWithRGB:0xFF00FF]之类的东西

    至于起始颜色值,其中一些记录在头文件中,如 UIButton.h,还有一些颜色可用作 UIColor 上的类方法,如 [UIColor lightTextColor] [UIColor darkTextColor] 等。这些记录在 UIColor 类参考中。

    http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIColor_Class/Reference/Reference.html

    如果你想检索默认颜色,总是有:

    [[button titleLabel] textColor]
    

    获取任意按钮的文字颜色。如果您想要默认颜色,请创建一个隐藏按钮并检查它的文本颜色。请注意,这不是很优雅。

    【讨论】:

    • @Nuoji:我所追求的没有记录在 UIButton.h 或 UIColor 中。所以答案是 - 没有这样的事情,使用算术。
    • 是的,在玩 Cocoa 时,还有很多实用功能/类别的空间。我怀疑 0-1.0 浮点颜色是受 OpenGL 和类似的启发。
    • P.S.添加了一种 hack-ish 方式来获得标准颜色。这种方法显然也适用于其他组件,但非常难看......
    • 颜色在 iOS 上是浮点数,因为它继承自 Mac,使用浮点数允许操作系统抽象出颜色表示的细节,并将更改时不可避免地引入的错误降到最低在色彩空间之间或将 2+ 种颜色混合在一起。这在很大程度上是设计使然。
    • UIColor 上的类别太过分了,恕我直言。相反,我会按照#define RGB(r,g,b) ([UIColor colorWithRed:(r)/255. green:(g)/255. blue:(b)/255.]) 的方式做一些事情。当与恒定 RGB 值一起使用时,这具有编译时计算的优势。
    【解决方案2】:

    如果你想要默认的按钮文本颜色,你所要做的就是:

    label.textColor = [button titleColorForState: UIControlStateNormal];
    

    您可以通过指定不同的 UIControlState 来获取其他颜色。

    【讨论】:

    • 假设我首先一个按钮。抱歉,这不是我想要的。
    • 当我使用它时,我只是做了一个临时按钮来获取颜色,然后在完成后将其删除。
    • @SevaAlekseyev 我知道这是很久以前的事了,但我再次遇到它并注意到这一点:“还有什么比这更优雅的吗?”如果优雅是您的目标,您可能需要切换到另一种语言 lul
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多