Swift 带有观察者的自定义导航栏项目
Swift Custom Navigation Bar Item With Observer
所以我有这个自定义导航栏项目,我想将其子类化并在其他 ViewControllers
中使用。问题是 Bar Item 还有一个 observer
,我想在 ViewDidAppear
上添加它并删除 ViewDidDisappear
上的 observer
。我怎样才能把subclass
栏的项目连同observer
出来。并将其包含在我的每个 ViewControllers
中而不是重复代码?
当前代码:
每个 ViewController
:
override func viewWillAppear(animated: Bool) {
if (!observingDefaults) {
defaults.addObserver(self, forKeyPath: Constants.General.kConnectedToPC, options: NSKeyValueObservingOptions(), context: nil)
observingDefaults = true
}
self.updateConnectionIcon()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if (observingDefaults) {
defaults.removeObserver(self, forKeyPath: Constants.General.kConnectedToPC)
observingDefaults = false
}
}
我的导航栏项目扩展:
extension UIViewController {
func updateConnectionIcon() {
self.navigationItem.rightBarButtonItem = nil
let isConnected = NSUserDefaults.standardUserDefaults().boolForKey(Constants.General.kConnectedToPC)
let button = UIButton()
if isConnected {
button.setImage(UIImage(named: "BluetoothEnabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
} else {
button.setImage(UIImage(named: "BluetoothDisabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
}
button.frame = CGRectMake(0, 0, 23, 31)
button.tintColor = UIColor.whiteColor()
button.userInteractionEnabled = false
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
}
无论如何,我可以将上半部分添加到底部代码中,这样我就可以在每个 ViewController
?
中调用 updateConnectionIcon()
与其在每个 viewController 中放置观察者,不如创建一个 BaseClase 并将其保留在那里并继承所有需要这些观察者的 class。有道理吗?
所以我有这个自定义导航栏项目,我想将其子类化并在其他 ViewControllers
中使用。问题是 Bar Item 还有一个 observer
,我想在 ViewDidAppear
上添加它并删除 ViewDidDisappear
上的 observer
。我怎样才能把subclass
栏的项目连同observer
出来。并将其包含在我的每个 ViewControllers
中而不是重复代码?
当前代码:
每个 ViewController
:
override func viewWillAppear(animated: Bool) {
if (!observingDefaults) {
defaults.addObserver(self, forKeyPath: Constants.General.kConnectedToPC, options: NSKeyValueObservingOptions(), context: nil)
observingDefaults = true
}
self.updateConnectionIcon()
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if (observingDefaults) {
defaults.removeObserver(self, forKeyPath: Constants.General.kConnectedToPC)
observingDefaults = false
}
}
我的导航栏项目扩展:
extension UIViewController {
func updateConnectionIcon() {
self.navigationItem.rightBarButtonItem = nil
let isConnected = NSUserDefaults.standardUserDefaults().boolForKey(Constants.General.kConnectedToPC)
let button = UIButton()
if isConnected {
button.setImage(UIImage(named: "BluetoothEnabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
} else {
button.setImage(UIImage(named: "BluetoothDisabled")?.imageWithRenderingMode(.AlwaysTemplate), forState: UIControlState.Normal)
}
button.frame = CGRectMake(0, 0, 23, 31)
button.tintColor = UIColor.whiteColor()
button.userInteractionEnabled = false
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton
}
}
无论如何,我可以将上半部分添加到底部代码中,这样我就可以在每个 ViewController
?
与其在每个 viewController 中放置观察者,不如创建一个 BaseClase 并将其保留在那里并继承所有需要这些观察者的 class。有道理吗?