我在不同的ViewControllers上有UIButtons菜单。所有这些看起来都一样。 当有未读消息或其他事件发生时,我想在每个ViewController上更改菜单按钮的图像。如何在不在每个ViewController上手动更改它的情况下完成它?
答案 0 :(得分:1)
一个简单的解决方案是保留一个UIButton数组,您可以在传入消息发生时迭代它。
let buttons: [UIButton] = [view1.button1, view2.button2]
... /// when event happens
for button in buttons {
button.backgroundColor = UIColor.red
}
这是有效的,因为按钮是引用类型而不是值类型。
然而,这似乎更像是一个关于如何处理事件的整体设计问题。我建议您查看RxSwift或ReactivCocoa以将传入的事件绑定到您的用户界面。
答案 1 :(得分:1)
继承自UIButton。在您继承的按钮类中注册一个选择器,它将改变您的按钮图像。
NotificationCenter.default.addObserver(self, selector: #selector(updateButton), name: NSNotification.Name("myEventIdentifier"), object: nil)
现在每当您触发要捕获的事件时,您都会发布通知,并通过在按钮的每个已注册实例上调用选择器来触发更改:
NotificationCenter.default.post(name: NSNotification.Name("myEventIdentifier"), object: nil)