Создайте класс BaseViewController, добавьте наблюдателя и измените цвет в этом viewcontroller.
class BaseViewController: UIViewController {
static var switchStatus = false
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(colorChanged(_:)), name: Notification.Name(rawValue: "ColorChanged"), object: nil)
}
@objc func colorChanged(_ notification: Notification) {
if let switchStatus = notification.userInfo?["switchStatus"] as? Bool {
BaseViewController.switchStatus = switchStatus
if switchStatus {
self.view.backgroundColor = .red
} else {
self.view.backgroundColor = .white
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if BaseViewController.switchStatus {
self.view.backgroundColor = .red
} else {
self.view.backgroundColor = .white
}
}
}
Для всех остальных контроллеров представления наследуются от этого viewcontroller.Не нужно добавлять наблюдателя в каждом классе.Поскольку он унаследован от BaseViewController, он автоматически добавляет наблюдателя для изменения цвета.
class ViewController: BaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Теперь, когда вы изменяете значение в UISwitch, публикуйте уведомление со статусом UISwitch.Класс Switch также наследуется от BaseViewController.
class Switch: BaseViewController {
var toggle = UISwitch()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(toggle)
//set frame and other properties...
toggle.addTarget(self, action: #selector(toggleWasToggled(_:)), for: .allEvents)
}
@objc func toggleWasToggled(_ sender: UISwitch) {
let userInfo = ["switchStatus":sender.isOn]
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "ColorChanged"), object: nil, userInfo: userInfo))
}
}