2017-11-13 3 views
0

次の問題があります。私は値を表示するためのビュー(この場合、ペアになっているBTデバイスのバッテリー値)を含むUIViewの拡張を得ました。値は1つの最終的なクラス(デバイス値を受け取り、処理する)から来ている間、いくつかのviewcontrollerでこのビューを持つ必要があります。UIView拡張のすべての子を一度変更する

このUIViewを「静的」にする方法はありますか.DeviceClassがBatteryClassのValueを変更し、これがBatteryClassのすべての子で変更されるようにしますか?それともこれを実現するための他の方法はありますか?私はちょうどすべてのviewcontrollerのBatteryViewを更新する新しいメソッドをコーディングする必要はありません。

+1

延長コードを追加できますか?あなたの問題に関しては、あなたの値(AppDelegateなど)を保存する方が良いと思います。 –

+0

確かに、UIViewは値が変更され、ビューを採用する必要があることをどのように知っていますか? – Paco89

+0

もっともシンプルな方法(最も美しいimhoではない)は、NotificationCenterを使用することです。https://stackoverflow.com/questions/24049020/nsnotificationcenter-addobserver-in-swift –

答えて

0

@ Y.Bonafonsは実際に正しい答えを持っています。私にとって最良の方法は、私が1対Nのコミュニケーションを持っているので、NotificationCenterを使用することです。

バッテリのハンドラがバッテリの値を変更すると、NotificationCenterを介して新しい値が登録され、登録されたすべてのオーバーレイがそのクラスの変更された値を処理します。 NotificationCenterで値を送信することができるかどうかはまだわかりませんが、それは疑問です。

ここでスイフト4.0のショート例:

class Device: UIViewController{ 
    func batteryValueChanged(){ 
     NotificationCenter.default.post(name: Notification.Name("ValueChanged"), object: nil) 
    } 
} 

と宛先クラスのわずかviewDidLoadに追加:

 NotificationCenter.default.addObserver(self, selector: #selector(self.updateValue()), name: Notification.Name("ValueChanged"), object: nil) 

Notification.Name("ValueChanged")はconsistendセレクタ@objc関数でなければならないが値が変更されたときに呼び出されます。

関連する問題