在所有视图控制器上设置十六进制

时间:2014-02-20 22:29:07

标签: ios objective-c uiviewcontroller uicolor

嘿伙计我有以下内容:

- (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

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

2 个答案:

答案 0 :(得分:2)

我建议两件事:

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

答案 1 :(得分: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 的人都可以访问这些颜色。