2014-02-20 41 views
0

嗨,我有以下:设置六角背景

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
     // SET BACKGROUND OF APPLICATION ON STARTUP 
    [self.view setBackgroundColor: [self colorWithHexString:@"88C800"]]; 

    // Do any additional setup after loading the view, typically from a nib. 
} 

-(UIColor*)colorWithHexString:(NSString*)hex 
{ 
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; 

    // String should be 6 or 8 characters 
    if ([cString length] < 6) return [UIColor grayColor]; 

    // strip 0X if it appears 
    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2]; 

    if ([cString length] != 6) return [UIColor grayColor]; 

    // Separate into r, g, b substrings 
    NSRange range; 
    range.location = 0; 
    range.length = 2; 
    NSString *rString = [cString substringWithRange:range]; 

    range.location = 2; 
    NSString *gString = [cString substringWithRange:range]; 

    range.location = 4; 
    NSString *bString = [cString substringWithRange:range]; 

    // Scan values 
    unsigned int r, g, b; 
    [[NSScanner scannerWithString:rString] scanHexInt:&r]; 
    [[NSScanner scannerWithString:gString] scanHexInt:&g]; 
    [[NSScanner scannerWithString:bString] scanHexInt:&b]; 

    return [UIColor colorWithRed:((float) r/255.0f) 
          green:((float) g/255.0f) 
          blue:((float) b/255.0f) 
          alpha:1.0f]; 
} 

这将改变的背景颜色我view controller (root)向我提供指定的十六进制颜色。我的问题是,在导航到另一个view controller时,如何获得上述功能来实现我的所有view controllers?此代码在我的ViewController.m

不确定我需要做什么,建议和想法?

+0

该死的让我眼睛酸痛,你能编辑代码移位等吗? –

回答

2

我建议两两件事:

  1. 让你colorWithHexString:类别类方法上UIColor。然后,您可以从任何导入您的类别.h文件的类访问该方法。
  2. 如果您希望应用中的每个视图控制器都具有客户颜色(或其他常见行为),则应该创建一个通用基类,如MyBaseViewController。让这个类延伸UIViewController,然后让您的所有应用的视图控制器扩展为MyBaseViewController。将所有常见设置放在基类中。如果您还需要一些表格视图控制器,则使用类似的代码创建一个MyBaseTableViewController类。
+0

@maddy你有什么建议? –

+0

@DavidBiga您的评论意味着成为一个玩笑吗? – rmaddy

+0

@maddy我很抱歉,我的意思是,最好的方法是什么?哈哈对不起 –

1

你不能轻易地使用实例方法来做到这一点。你应该做两件事:(1)促使colorWithHexString:成为UIColor类的方法(使用一个类别); (2)如果您要在很多地方使用相同的颜色,请将颜色从任何位置放置,例如.pch文件或其他任何人都可以导入的标头。

下面是我自己的代码示例:

// MyIncudes.h 
@interface UIColor (mycats) 
+ (UIColor*) myGolden; 
+ (UIColor*) myPaler; 
@end 

// MyIncludes.m 
@implementation UIColor (mycats) 
+ (UIColor*) myGolden { 
    return [self colorWithRed:1.000 green:0.894 blue:0.541 alpha:.900]; 
} 
+ (UIColor*) myPaler { 
    return [self colorWithRed:1.000 green:0.996 blue:0.901 alpha:1.000]; 
} 
@end 

现在任何人谁进口MyIncludes.h访问这些颜色。

+0

所以我不能在ViewController.h中简单地做这件事吗? –

+0

您不能保证始终会有一个ViewController实例进行对话,因此它需要是一个类方法。但在这种情况下,你应该放置在一个中立的适当位置;这就是为什么我建议一个UIColor类别。你不希望所有其他类都具有它们不需要的ViewController的知识。 – matt

+0

因为当你创建一个UIColor的类别时,它会向UIColor添加方法。在你的情况下,你想要一个类方法+(UIColor)colorWithHexString:(NSString *)hexString;这样,任何时候你想用十六进制字符串创建一个颜色,只要使用该方法,即使它在UIButton的子类中,或者在程序中的任何位置。 –