2016-09-01 4 views
0

このカスタムナビゲーションバーアイテムは、サブクラス化して他のViewControllersで使用します。問題は、Bar ItemにもViewDidAppearに追加したいobserverがあり、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()を呼び出すことができますか?

答えて

2

各viewControllerにオブザーバを置くのではなく、1つのBaseClaseを作成してそこに保持し、これらのオブザーバを必要とするすべてのクラスを継承します。それは理にかなっていますか?

+0

はいそうです。ありがとうございました! – KotaBear233

+0

小さなサンプルを提供できますか? – KotaBear233

+0

http://www.tutorialsp.com/.com/swift/swift_inheritance.htm – Sandy

関連する問題