2016-09-01 3 views
0

Итак, у меня есть эта настраиваемая позиция навигационной панели, которую я хотел бы подклассировать и использовать в других ViewControllers. Проблема в том, что в баре Item также есть observer, который я хочу добавить на ViewDidAppear и удалить observer по телефону ViewDidDisappear. Как я могу сделать subclass элемент бара вместе с observer. И включить его в каждый из моих ViewControllers вместо дублирования кода?Быстрая пользовательская панель навигации Пункт с Observer

Текущий код:

В каждом 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 
    } 
} 

Мой добавочный Nav Bar Предмет:

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 
} 
} 

Во всяком случае, я могу добавить верхнюю часть к нижней кода, так что я можно просто вызвать updateConnectionIcon() в каждом ViewController?

ответ

2

Вместо того чтобы помещать наблюдателя в каждый viewController, создайте один BaseClase и сохраните его там и наследуйте весь класс, который нуждается в этом наблюдателе. это смысл?

+0

Да. Спасибо! – KotaBear233

+0

Можете ли вы привести небольшой пример? – KotaBear233

+0

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

Смежные вопросы