从一个视图控制器更改项目中所有视图的背景颜色?

Posted

技术标签:

【中文标题】从一个视图控制器更改项目中所有视图的背景颜色?【英文标题】:Changing background color of all views in project from one view controller? 【发布时间】:2014-11-23 19:21:54 【问题描述】:

在我的应用程序中,我有一个设置视图,您可以在其中更改应用程序的背景颜色。 我需要一种方法来从一个视图控制器更改所有视图的背景颜色。

我该如何实现这一目标?

【问题讨论】:

【参考方案1】:

我建议您创建一个单例对象,它将存储应用程序的设置并保存它。在这个服务中提供一个背景属性,然后你可以在任何你想要的地方获取它。

更新:

这里是 SettingsService 单例:

import Foundation
import UIKit

class SettingsService 

    class var sharedService : SettingsService 
        struct Singleton 
            static let instance = SettingsService()
        
        return Singleton.instance
    

    init()  

    var backgroundColor : UIColor 
        get 
            var data: NSData? = NSUserDefaults.standardUserDefaults().objectForKey("backgroundColor") as? NSData
            var returnValue: UIColor?
            if data != nil 
                returnValue = NSKeyedUnarchiver.unarchiveObjectWithData(data!) as? UIColor
             else 
                returnValue = UIColor(white: 1, alpha: 1);
            
            return returnValue!
        
        set (newValue) 
            let data = NSKeyedArchiver.archivedDataWithRootObject(newValue)
            NSUserDefaults.standardUserDefaults().setObject(data, forKey: "backgroundColor")
            NSUserDefaults.standardUserDefaults().synchronize()
        
    

它有一个 backgroundColor 属性,它使用 NSUserDefaults 来存储值并在用户默认值中没有任何值时初始化一个默认值。

现在您可以使用它在设置视图中设置值:

func backgroundColorChanged(color : UIColor) 
    SettingsService.sharedService.backgroundColor = color;

并使用它,例如在 viewDidLoad() 方法中:

override func viewDidLoad() 
    super.viewDidLoad()
    self.view.backgroundColor = SettingsService.sharedService.backgroundColor;

【讨论】:

你能解释一下吗? 嗨,我想你可以帮我解决我的最后一个问题,你能检查一下吗? ***.com/questions/55401038/…@DanilValeev【参考方案2】:

这可以通过将背景的类方法设置器转换为 UIView 来实现。 http://nshipster.com/method-swizzling/

【讨论】:

以上是关于从一个视图控制器更改项目中所有视图的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

更改所有类的所有视图控制器的背景颜色(swift 4)

ListView:如何从列表中访问视图以更改背景颜色?

更改父视图控制器背景颜色

使用 UIAppearence 更改 UIViewController 的直接子视图的背景颜色

按下按钮时更改列表视图背景颜色

更改视图的背景颜色似乎很难?