Изменение цвета фона всех представлений в проекте из одного контроллера представлений?

В моем приложении у меня есть представление настроек, в котором вы можете изменить цвет фона приложения. Мне нужен способ изменить цвет фона всех представлений из одного контроллера представления.

Как мне добиться этого?

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

Это может быть достигнуто с помощью swizzeling в методе установки класса для фона в UIView. http://nshipster.com/method-swizzling/

Другие вопросы по тегам