代码之家  ›  专栏  ›  技术社区  ›  futureelite7 Adam Rosenfield

目标C定义uicolor常量

  •  27
  • futureelite7 Adam Rosenfield  · 技术社区  · 16 年前

    我有一个iPhone应用程序,为我的主题定制了一些颜色。因为这些颜色将为我的用户界面固定,所以我想定义一个类中要包含的颜色(constants.h和constants.m)。我该怎么做?(简单地定义它们不起作用,因为uicolors是可变的,并且会导致错误-初始化器不是常量)。

    /* Constants.h */
    extern UIColor *test;
    
    /* Constants.m */
    UIColor *test = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
    

    谢谢!

    7 回复  |  直到 10 年前
        1
  •  45
  •   drawnonward    16 年前

    uicolor不可变。我通常用颜色、字体和图像来做这个。您可以很容易地将其修改为使用单例或具有静态初始值设定项。

    @interface UIColor (MyProject)
    
    +(UIColor *) colorForSomePurpose;
    
    @end
    
    @implementation UIColor (MyProject)
    
    +(UIColor *) colorForSomePurpose { return [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]; }
    
    @end
    
        2
  •  30
  •   Fateh Khalsa    13 年前

    为了简单起见,我这样做了:

    /* Constants.h */
    #define myColor [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0]
    

    别忘了去掉“;”,这样你就可以把它用作一个普通表达式。

    我不确定这种方法在技术上是否有什么问题,但是它工作得很好,并且避免了编译时常量初始值设定项错误-这段代码有效地固定在您放置“mycolor”的任何位置,因此在实际使用它之前,它不会被编译。

        3
  •  14
  •   yeahdixon    14 年前

    另一选择

    在你的.h中你可以做到

    extern UIColor *  const COLOR_LIGHT_BLUE;
    

    在你的.mm中你可以做到

    UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255  blue:1 alpha:1];//;#15B4FF
    
        4
  •  3
  •   Albert Renshaw    10 年前

    如果你想找一个不带扩展名的又快又脏的 clang :

    #define kGreenColor colorWithRed:(0/255.0) green:(213/255.0) blue:(90/255.0) alpha:1.0
    
    - (void)doSomething
    {
       _label.textColor = [UIColor kGreenColor];
    
    }
    
        5
  •  0
  •   Kendall Helmstetter Gelner    16 年前

    通常,人们会将全局常量放入单例对象中——或者正如DrawUnward所指出的那样,您可以通过某个类的类方法来访问它们。

        6
  •  0
  •   goetz    11 年前

    另一种方法是:

    页眉:

    #if !defined(COLORS_EXTERN)
        #define COLORS_EXTERN extern
    #endif
    
    COLORS_EXTERN UIColor *aGlobalColor;
    

    实施:

    #define COLORS_EXTERN
    #import "GlobalColors.h"
    
    
    @interface GlobalColors : NSObject
    @end
    
    @implementation GlobalColors
    
    + (void)load
    {
        aGlobalColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.4 alpha:1];
    }
    
    @end
    

    这有点像一个黑客,但是您不需要在实现中重新定义颜色,并且您可以在不调用方法的情况下访问颜色。

        7
  •  -1
  •   Jared Pochtar    16 年前

    使用AppController使颜色可以全局访问,而不是静态变量。从架构的角度来看,这样做是有意义的,而且如果你想假设改变配色方案,即使在运行时,这也只是AppController上的一两个方法。