Пользовательский элемент UIControl с глобальным состоянием для всех экземпляров
У меня есть контроллер ящика представления меню в приложении iOS. Это меню переключается нажатием кнопок меню (UIButton), доступных на каждом экране.
Как вы можете видеть на макете: кнопки меню могут иметь красную точку, показывающую, что новый контент доступен - для этого случая у меня просто есть два изображения для кнопки меню без точки и с ней.
Я думал о создании пользовательского UIControl с "глобальным" свойством для этой точки. Это правильный путь?
class MenuButton : UIButton {
static var showNotificationDot : Bool = false
}
1 ответ
Решение
Например, вы можете создать подкласс UIButton и добавить наблюдателя.
class MyButton: UIButton {
static let notificationKey = NSNotification.Name(rawValue: "MyButtonNotificationKey")
override init(frame: CGRect) {
super.init(frame: frame)
self.subcribeForChangingState()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
fileprivate func subcribeForChangingState() {
NotificationCenter.default.addObserver(forName: MyButton.notificationKey, object: nil, queue: nil) { notificaton in
if let state = notificaton.object as? Bool {
self.changeState(active: state)
}
}
}
fileprivate func changeState(active: Bool) {
//change ui of all instances
print(active)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
И изменить пользовательский интерфейс из любого места, как это:
NotificationCenter.default.post(name: MyButton.notificationKey, object: true)