2011-10-25 7 views
1

私は電卓のインターフェイスを操作するUIViewControllerを作成していますが、UIViewControllerはグラフの描画を扱います。UIViewController相互通信、UIViewControllerを強制的に更新する方法はありますか?

グラフボタンを押すと、グラフが自動的に再描画されます。次に、グラフは電卓のプロトコルメソッドにコールバックを実行して、与えられた各x座標のy値を取得します。

このようなコミュニケーションを処理する標準的な方法は何ですか?私はUIViewControllersetNeedsDisplay(これは実際にはUIViewメソッドだとわかっています)のようなものを呼び出すことができるはずですが、同様の方法で別のプロトコルを書く必要があると感じています。 updateViewControllerメソッドのいくつかの種類がありますか?

私の計算機UIViewControllerは、UIViewControllerというグラフだけを知りたいと思っていますが、グラフは私が定義したプロトコルで電卓を知っています。

答えて

1

これを行うにはいくつかの方法があります。

  1. ターゲット/アクション
  2. 代表あなたの場合
  3. NSNotificationCenter
  4. KVO(キー値が観測)

、KVOは最良の選択肢であると思われます。基本的に、グラフが描画するものはです。電卓のインターフェイスにはがあります(私が正しく理解していれば)を参照してください。いくつかの変数(読み取りキー)を変更します。 this document to learn moreを見てください。あなたが定義によって、などInfactは前回値、新しい値を取得することができますので、

KVOはあなたにも、グラフの描画を最適化させることができます:

キー値監視は、オブジェクトが通知されますメカニズムです他のオブジェクトの指定されたプロパティに変更されます。

+0

キー値監視は面白そう、私は '見てきたNSNotificationCenter'は、他の場所で言及したが、私はそのドキュメントがKVO''について言うように:「'NSNotificationCenter'を使用した通知とは異なり、提供して何の中央オブジェクトがありませんすべてのオブザーバーの通知を変更します。代わりに、変更が加えられたときに監視オブジェクトに直接通知が送信されます」これは、「シングルトンのような」ものではないようですが、これは良いことだと思いますか? – Lockyer

+0

この場合は確かです。タブ内の別のタブ内のビューコントローラについてはわかりませんが、KVOは可能ではありません(うごろう可能性があります)チェックマークをクリックすることができます:) – zakishaheen

+0

もう少し読んだら、ターゲット/アクションはUIViewController' -UIView通信の方が多く、NSNotificationCenterとKVOはモデル間通信に適していると思います。結局のところ、私はDelegates/Protocolsと一緒に行くだろうが、IOSが提供する他の施設を知ることは良いことだ。 – Lockyer

1

私の知る限りでは、UIViewControllerにはあなたが望むものは何もありません。あなたはおそらくあなたが提案してから、[yourViewController.view setNeedsDisplay:]のような何らかのプロトコルを実行する必要があります。

希望に役立ちます。

1

これを行うにはさまざまな方法があります。これは前にここで尋ねられています。たとえば:

iPhone how to pass data between several viewcontrollers

あなたの特定のケースで、私はNSNotificationを使用します。他のViewControllerから通知を再描画してポストする必要があるviewControllerでそれをサブスクライブします。