Изменение цвета фона всех представлений в проекте из одного контроллера представлений?
В моем приложении у меня есть представление настроек, в котором вы можете изменить цвет фона приложения. Мне нужен способ изменить цвет фона всех представлений из одного контроллера представления.
Как мне добиться этого?
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/