2010-12-09 7 views
0

iPhoneのメールアプリケーションのデザインを複製しようとしています。ツールバーのラベルが更新/変更され、送信されるメールのステータスが表示されます。iPhone - UIToolbar - デリゲートメソッド/通知/ KVC

これを複製するにはどうすればよいですか?以下は私が思ったことであり、誰かがなぜ彼らの仕事や新しいアイデアを提案するかもしれない。

私は、以下のビューを持っていると言うことができます:A -> B -> C - DA,B、およびCがUINavigationControllerの内部でプッシュされ、UINavigationControllerがオフになり、問題のツールバーが表示されます。 Dは「作成」ウィンドウで、Cのモーダルウィンドウです。そして、私が作成しようとしているオブジェクトを呼び出すことはobjです。

委任

これはAで1 objを作成する私を必要としB、およびCに渡します。 Cは、objsendMailなどのメソッドを呼び出し、電子メールを送信しようとします。 'obj'は委譲されたクラス(C)に配列を送信してツールバーを更新するデリゲートメソッドobj:hasUpdateForToolbar:を持つでしょう。送信プロセスを通じて、プログレスバーを更新するために複数のメッセージを送信し、最後に成功したか、最後の電子メールのチェックが行われた日付を通知します。

この解決策ではの問題はAまたはBに更新されません。 Cがポップされると、代理人はBに再割り当てする必要があり、次の値がobjでプッシュされる前にツールバーに古い値のフラッシュがあると思います。

通知

これは、あなたがクラス間の依存関係少ない)を意味し、すべてのクラスにオブジェクトを渡すために持っていないという点で、デリゲートよりもきれいになります。しかし、接続していないので、Cには、新しいメールを送る準備ができているという通知をポストする必要があります。 objは、その通知を受け取る必要があり、その後、デリゲートメソッドの代わりに新しい通知をポストする必要があります。

問題はです。これは、ビューが表示されていないときに通知の登録を解除するのが一般的な方法です。ですから、私は、Bと同じフラッシュがあり、通知に加入し、それがツールバーの次の更新をプッシュするのを待つと思います。

KVC

私は本当にキー値コーディングはそれの世話をするように私はこれを設定することができるかわかりません。 objのビューをセットアップして、各ビューのツールバーに入れて、ラベルやプログレスバーを使って更新すると、すべてのツールバーに反映されますか?

これは最高です/私はこれらに欠けていますか?

答えて

0

あなたはアプリケーションコントローラを持っています(AppDelegateまたは他のグローバルに可視のオブジェクトである可能性があります)。)

このアプリケーションコントローラは、モデルの作成(電子メールのフェッチ、電子メールの送信など)とUI(作成画面、UINavigationController、ViewControllersなど)を担当します。このアプリケーションコントローラは、ツールバーの内容、すなわち、再読み込みおよび作成ボタン、およびステータス領域の内容も担当します。

ナビゲーションスタック内のビューコントローラは、このツールバーの内容を心配することなく、アプリケーションコントローラからツールバー項目(Compose、Reload、Status)を取得するだけです。

アプリケーションコントローラだけでは、モデルのステータス(送信、受信など)に基づいてツールバーステータスエリアの内容を更新します。アプリケーションコントローラとそのモデル間の通信は、通常のKVOまたは通知になります。

+0

これは多くの意味があります。私は各オブジェクトを介してデリゲートを渡すだけで、私のアプリケーションのすべてのビューがそれにアクセスする必要があったわけではありません。答えをありがとう。 – RyanJM

関連する問題