Ios 更改UIView的背景色
我在设置Ios 更改UIView的背景色,ios,objective-c,uiview,background-color,uicolor,Ios,Objective C,Uiview,Background Color,Uicolor,我在设置ui视图的背景色时遇到问题。我正在使用以下代码: self.view.backgroundColor = [UIColor colorWithRed:0 green:0.675 blue:0.929 alpha:1];
ui视图的背景色时遇到问题。我正在使用以下代码:
self.view.backgroundColor = [UIColor colorWithRed:0
green:0.675
blue:0.929
alpha:1];
当我在应用程序开始时设置背景色时,这可以正常工作,但是当我从通知中心小部件启动应用程序后想要更新背景色时,它不会更改颜色
编辑–更多详细信息:
从通知中心启动应用程序时,将调用AppDelegate方法,该方法将调用的URL方案保存为`NSString,并调用另一个方法,在该方法中应更新背景颜色
我已经验证了方法调用是否正常工作
我的问题是,虽然调用了该方法,但颜色没有更新。如果您是从通知中心启动应用程序,则表示该应用程序从背景到前景。在这种情况下,您需要在方法ApplicationIdentiter background&ApplicationIdentiterForeGround中处理uiview背景更新视图中显示的控制器的视图中的颜色。设置断点以确保调用代码并且引用的视图不是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"]];
}
我已经解决了我的问题。在AppDelegate.m中,在获取应用程序启动时使用的URL的方法中,我初始化了一个新的ViewController,而不是使用旧的ViewController,这导致了我所有的错误。谢谢你的帮助 它真的应该在视图中设置将出现。对不起,可能我没有很好地描述我的问题。从通知中心启动应用程序时,将调用AppDelegate方法,该方法将调用的URL方案保存为NSString,并调用另一个方法,在该方法中应更新背景颜色。方法调用工作正常;我已经用NSLogs对它进行了测试。我的ViewDidAspect方法只有在应用程序启动时才被调用。我知道,这很奇怪,但我可能做错了什么?将代码放入您自己的公共方法updateDisplay
,并在收到通知后从应用程序代理调用。您没有提供足够的信息来解决问题。Show“并调用另一个应该更新背景颜色的方法”。不要忘记导入QuartzCore
。