更改UIView的背景颜色

时间:2014-12-12 20:06:42

标签: ios objective-c uiview background-color uicolor

我在设置UIView的背景颜色时遇到问题。我正在使用以下代码:

self.view.backgroundColor = [UIColor colorWithRed:0 
                                            green:0.675 
                                             blue:0.929 
                                            alpha:1];

当我在应用程序的开头设置背景颜色时,此功能正常,但是当我从通知中心小部件启动应用程序后想要更新背景颜色时,它不会更改颜色


编辑 - 更多细节:

当从通知中心启动应用程序时,会调用AppDelegate方法,该方法将被调用的URL方案保存为`NSString,并调用另一种应该更新背景颜色的方法。

我已经验证了方法调用正常。

我的问题是虽然调用该方法但颜色不会更新。

3 个答案:

答案 0 :(得分:3)

我解决了我的问题。在AppDelegate.m中,在我获得启动App的URL的方法中,我初始化了一个新的ViewController而不是使用旧的ViewController,这导致了我的所有错误。谢谢你的帮助!

答案 1 :(得分:0)

如果您从通知中心启动应用程序,则意味着该应用程序将从后台传到前台。在这种情况下,您需要在方法applicationDidEnter background& amp;中处理uiview背景。 applicationDidEnterForeground

答案 2 :(得分:0)

在显示视图的控制器的viewWillAppear中更新颜色。设置断点以确保调用代码并且引用的视图不是nil

如果您只想“保存”颜色而不显示颜色,请使用NSUserDefaults。您只能存储基元,因此您可以这样做。

// save
[[NSUserDefaults standardUserDefaults] setObject:@"0,0.675,0.929" forKey@"savedColor"];

// retrieve
NSString *colorString = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedColor"];
NSArray *c = [colorString componentsSeparatedByString:@","];
CGFloat r = [c[0] floatValue];
CGFloat g = [c[1] floatValue];
CGFloat b = [c[2] floatValue];
UIColor *color = [UIColor colorWithRed:r green:g blue:b alpha:1];

或者可能更明确,更简洁

// save
[[NSUserDefaults standardUserDefaults] setObject:
  @{@"red" : @0, @"green" : @0.675, @"blue" : @0.929} forKey:@"savedColor"];

// retrieve
NSDictionary *c = [[NSUserDefaults standardUserDefaults] objectForKey@"savedColor"];
UIColor *color = [UIColor 
   colorWithRed:c[@"red"]  green:c[@"green"] blue:c[@"blue"] alpha:1];

现在你把它全部放入便利方法中:

-(void)saveColorToUserDefaults:(UIColor*)color withKey:(NSString*)key {
    CGFloat red, green, blue, alpha;
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
    [[NSUserDefaults standardUserDefaults] setObject:
       @{@"red": @(red), @"green" : @(green), @"blue" : @(blue), @"alpha" : @(alpha)}
       forKey: key];
}

-(UIColor*)colorFromUserDefaultsWithKey:(NSString *)key {
   NSDictionary *c = [[NSUserDefaults standardUserDefaults] objectForKey@"savedColor"];
   return = [UIColor colorWithRed:c[@"red"]  green:c[@"green"] 
                             blue:c[@"blue"] alpha:c[@"alpha"]];
}