2

我是 Objective-c 的新手,我有一个架构或设计模式的问题。我正在构建一个 ios 应用程序,并且像大多数 ios 应用程序一样,它使用各种颜色、字体、图案等。也许我目前正在编写错误的代码,但我发现自己正在重写诸如颜色设置之类的东西。结果,更改颜色变成了在代码中查找所有颜色设置、重写它们等方面的练习。对我来说似乎有点低效。

例如,我在我的应用程序的多个地方使用了深红色。我倾向于相当频繁地编写 [UIColor colorWithRed...] 方法。但是,我很好奇创建一个返回我的自定义颜色(作为 UIColor)的单例是否是“模块化我的样式包”的合理方法。因此我可以写这样的东西

[label setTextColor:[[MyStyleSingletonClass sharedStyler] myDarkRed]];

因此,如果设计师突然想让 myDarkRed 变暗一点,我会更改一次,然后浏览应用程序就好了。显然,风格和 UX 不仅仅是颜色,但我很好奇这种方法是否有意义,或者我是否正在为将来的问题做好准备。或者也许这种能力已经存在于objective-c中,我没有抓住重点。提前致谢。

4

2 回答 2

8

我认为更好的方法是 UIColor 本身的一类方法。我经常为具有大量自定义颜色的项目编写颜色类别。

像这样的东西:

// UIColor+AppAdditions.h
@interface UIColor (AppAdditions)

+ (UIColor *)myDarkRed;

@end

// UIColor+AppAdditions.m

#import "UIColor+AppAdditions.h"

@implementation UIColor (AppAdditions)

+ (UIColor *)myDarkRed
{
    return [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0];
}

@end

这样你就不需要一个完整的 Singleton 并且它更便携,因为 Singleton 可以做其他事情。你可以像这样干净地访问你的颜色:

[label setTextColor:[UIColor myDarkRed]];

笔记

正如罗伯和保罗所提到的。最好适当地命名它们。我取了你的名字,但最好专门为它们命名,并遵循前缀和后缀等约定。

于 2013-03-15T14:36:26.527 回答
5

为什么不使用macro

YourHelperClass.h

#define DARK_RED    [UIColor colorWithRed:0.1 green:0.0 blue:0.0 alpha:1.0]

你可以像这样使用(不要忘记 import YourHelperClass.h):

[label setTextColor:DARK_RED];

我觉得更好用macro

于 2013-03-15T14:53:02.697 回答