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