簡體   English   中英

更改UIView的背景顏色

[英]Change the Background Color of a UIView

我在設置UIView的背景顏色時遇到問題。 我正在使用以下代碼:

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

當我在應用程序的開頭設置背景顏色時,此功能正常,但是當我從通知中心窗口小部件啟動應用程序后想要更新背景顏色時,它不會更改顏色。


編輯 - 更多細節:

當從通知中心啟動應用程序時,會調用AppDelegate方法,該方法將被調用的URL方案保存為`NSString,並調用另一種應該更新背景顏色的方法。

我已經驗證了方法調用工作正常。

我的問題是雖然調用了方法,但顏色不會更新。

我已經解決了我的問題。 在AppDelegate.m中,在我獲得啟動App的URL的方法中,我初始化了一個新的ViewController而不是使用舊的ViewController,這導致了我的所有錯誤。 謝謝你的幫助!

如果您從通知中心啟動應用程序,則意味着該應用程序將從后台傳到前台。 在這種情況下,您需要在方法applicationDidEnter background&applicationDidEnterForeground中處理uiview背景

在視圖顯示的控制器的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"]];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM