我在设置UIView
的背景颜色时遇到问题。我正在使用以下代码:
self.view.backgroundColor = [UIColor colorWithRed:0
green:0.675
blue:0.929
alpha:1];
当我在应用程序的开头设置背景颜色时,此功能正常,但是当我从通知中心小部件启动应用程序后想要更新背景颜色时,它不会更改颜色
编辑 - 更多细节:
当从通知中心启动应用程序时,会调用AppDelegate方法,该方法将被调用的URL方案保存为`NSString,并调用另一种应该更新背景颜色的方法。
我已经验证了方法调用正常。
我的问题是虽然调用该方法但颜色不会更新。
答案 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"]];
}