2014-01-09 24 views
3

我正在處理幾個不同的應用程序,它們重複使用相同的xib文件,但每個應用程序都有自己的配色方案。在xib文件中設置UIView的顏色(或其他屬性)PER TARGET

對於應用程序的大部分部分(導航欄顏色,UIBarButtonItem的),我們對每個應用程序使用UIAppearance方法。

但是,對於某些部件而言,它變得更加複雜,例如標籤的顏色需要爲App 1的顏色A,B和C,並且需要爲App 2的顏色B,C和D ,我想不出用UIAppearance這樣簡單的方法。

這樣做的一個顯而易見的方法是當視圖控制器加載設置標籤的顏色,並將顏色存儲在plist或類似的東西中時。此外,我可以爲每個項目複製xib並編輯xib中的顏色,但是它破壞了共享xib的目的,並且我必須不斷更新用於UI的每個更改的多個xib。

但是,我很好奇,如果我可以使用「User Defined Runtime Attributes」或其他可以輕鬆管理的東西來解決這個問題?

在此先感謝!

+0

又來一功能的Xcode不提供。在開發Android之後,我哭了很多。一切都在代碼中處理,而它應該在UIbuilder中 –

回答

2

製作名爲

redColor blueColor

兩個目標在兩者的話,轉到構建設置>設置預處理器宏>

爲redColor>添加預處理宏IS_RED_THEME 爲blueColor>添加預處理器宏IS_BLUE_THEME

現在在您的班級

在viewWillAppear中或在viewDidLoad中或任何你想要把這個代碼:

#ifdef IS_RED_THEME 
//apply Red COlor 
#elif IS_BLUE_THEME 
//apply Blue Color 
#endIf 
1

我的意見,我創建了一個名爲「調色板」類,並在這個班,我創造了一些不變的顏色。在我的應用程序開始時,我開始這個課程(只有一次),我可以訪問我想要的應用程序中的所有顏色。下面一個例子:

Palette.h

/* HEXA to RGB */ 
#define UIColorFromRGB(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1.0] 


/* Used colors in app */ 
#define kColor1   UIColorFromRGB(0xFFFFFF) 
#define kColor2   UIColorFromRGB(0x48CF35) 


@interface Palette : NSObject 

+ (Palette *)shared; 

#pragma mark - Colors 
@property (nonatomic, readonly)UIColor *color1; 
@property (nonatomic, readonly)UIColor *color2; 

而且我Palette.m

@implementation Palette 
{ 
    UIColor *color1; 
    UIColor *color2; 
} 

+ (Palette *)shared 
{ 
    static Palette *instance; 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken, ^{ 
     instance = [[Palette alloc] init]; 
    }); 

    return instance; 
} 

- (id)init 
{ 
    self = [super init]; 
    if(self) 
    { 
     //... 
    } 
    return self; 
} 

#pragma mark - Colors 
- (UIColor *)color1 
{ 
    if(nil == color1) 
     color1 = kColor1; 
    return color1; 
} 

- (UIColor *)color2 
{ 
    if(nil == color2) 
     color2 = kColor2; 
    return color2; 
} 

接下來,我添加了Pallete.h類在我的應用程序前綴.pch文件可以在任何地方訪問。 最後,在我的應用程序委託時appDidFinishLaunchingWithOptions,我簡稱:

[Palette shared]; 

,並添加顏色一個UILabel:

UILabel *label = [UILabel new]; 
     [label setText:@"My label"]; 
     [label setTextColor:[[Palette shared] color1]]; 

希望它幫助;)

2

您也可以使用其他C標誌他們bagan與-D

像-DIS_RED_THEME

0

所以我們得到了2個可能的解決方案已經:

  1. 辛格爾頓含有顏色由Lapinou通過Xeieshan
  2. 預處理宏

我能想到的3分額外的:

  1. NSUserDefaults的(工作作爲單例) 您可以將NSUserDefaults中的所有顏色設置爲runonce並將其加載到每個控制器中。 您可以將顏色歸檔到NSData中並直接加載它們或加載一個十六進制字符串並在需要時創建它。
  2. 創建一個對象,在開始時保存所有的顏色(ButtonPrimary,ButtonSecondary等...像單身人士),並通過您的導航傳遞它。
  3. 向NSObject添加一個包含所有顏色的類別。他們現在應該到處可用。

我不能說很多表現明智,但我認爲Lapinou建議的單身人士將會做它的工作。只要確保命名這些propertys(LabelTextPrimary,LabelBorderFine,LabelBorderThick等)爲color1,color2,color3就會很快破壞你的脖子。

就我個人而言,我使用1 + 2(我的列表),因爲我可以自由選擇使用全局(nsuserdefault)色彩方案,同時讓顯著navigationcontroller使用它自己的。

如果你想去NSUserDefaults這可能會有所幫助。

- (UIColor *) createColorFromHex:(NSString *)hexString 
{ 
    NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    if([cleanString length] == 3) { 
     cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@", 
         [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)], 
         [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)], 
         [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]]; 
    } 
    if([cleanString length] == 6) { 
     cleanString = [cleanString stringByAppendingString:@"ff"]; 
    } 

    unsigned int baseValue; 
    [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue]; 

    float red = ((baseValue >> 24) & 0xFF)/255.0f; 
    float green = ((baseValue >> 16) & 0xFF)/255.0f; 
    float blue = ((baseValue >> 8) & 0xFF)/255.0f; 
    float alpha = ((baseValue >> 0) & 0xFF)/255.0f; 

    // NSLog(@"SUCCESS; Color created: %f, %f, %f, %f from %@",red,green,blue,alpha,cleanString); 

    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; 
} 

編輯:計算器是搞亂我的號碼:d

相關問題