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

时间:2014-11-23 19:21:54

标签: ios swift

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

我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

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

更新:

这是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;
}

答案 1 :(得分:0)

可以通过在类的方法设置器中为后台调用UIView来实现。 http://nshipster.com/method-swizzling/