gpt4 book ai didi

带观察者的 Swift 自定义导航栏项目

转载 作者:行者123 更新时间:2023-11-28 12:41:43 25 4
gpt4 key购买 nike

所以我有这个自定义导航栏项目,我想将其子类化并用于其他 ViewControllers .问题是 Bar Item 也有一个 observer我想添加 ViewDidAppear并删除 observerViewDidDisappear .我怎样才能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 并将其保存在那里并继承所有需要这些观察者的类。有道理吗?

关于带观察者的 Swift 自定义导航栏项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com