2012-04-13 4 views
0

私は基本的なモーダルビューシステムを持っています。ビューを閉じると、すべての値が失われます... viewWillAppearを治療法として使用しますか?

私のアプリは、他の2つのビューを表示する2つのボタンがあるUIベースを読み込みます。 これらのビューでは、閉じるボタンです。

すべて正常です。

しかし、2つのモーダルビューのうちの1つでは、私はUISlider & UISwitchの束を持っています。 私はそれらに値を保持してもらいたいが、却下によって失われます:UI要素を含むビューを表示するようにボタンをトリガーするとすぐに、このビューは最初にxibに配置されたときのすべての要素のすべての値とともに表示されます。

すべての値を変数に保存する必要がありますか?次に、viewWillAppearでそれらを「呼び出す」ことができますか?

私に別の戦略を教えてもらえますか?

+0

ビューの割り当てが解除されると、そのビューの値を保持する方法をどのように期待できますか? – CodaFi

+0

特に、私は期待しておらず、あなたも答えません。 – gluon

答えて

2

はい、あなたの提案したアプローチはまさに正しいものです。しかし、注意してください。 viewWillAppearは多くの理由から呼び出すことができます。ビューコントローラが存在して初めてビューを表示しているときにのみこれを実行していることを確認してください。

NSUserDefaultsは、このようにグローバルに必要な情報を保存するのに最適な場所です。 viewWillDisappearには、希望の状態情報(スライダとスイッチの値)をデフォルトで格納します。その後、次回ビューが表示されようとしているときにそれらを取得します。

+0

NSUserDefaultsについて知りました! OpenFrameworksを使って、私はOF側にも物事を保存することができたと考えました。私の場合、それは素晴らしい&簡単なデザインパターンになることができます。あなたの答えに多くの感謝! – gluon

2

モーダルビューを作成すると、modalViewの新しいインスタンス、つまりmodalViewが作成されます。この新しいインスタンスは、他のインスタンスについては何も知らない。これらのモーダルビューコントローラの以前の反復による情報を保持するには、いくつかの方法があります。

どうすればいいですか: プレースホルダーをメインビューに設定し、ユーザーが選択した値をプロトコルとデリゲートのセットアップを介してメインビューに渡します。その後、モーダルビューを表示する前に、モーダルビューをセグしてそれらの変数を読み込むことができます。

{slider = YES、someValue = 10、...}すべての値を持つ辞書があるとしましょう。メインビューコントローラで最初に作成した辞書を作成し、デフォルト値を配置しますその中に。

モーダルビューコントローラでは、同じ辞書をプロパティとして作成します。

モーダルビューコントローラのデリゲートとして及びdoneEditingの実装では、あなたの最初のビューを設定し

- (void) doneEditing:(NSDictionary *)values

のようなものがある方法であなたのモーダルビューコントローラでのプロトコルを作成し値をコピーモーダルビューをポップする前に、最初のビューに存在する辞書に移動します。

モーダルビューを再度表示する準備ができたら、モーダルビューの辞書プロパティに値をコピーしてから表示します。

これはあなたが正しい方向に向かうことを願っています。モダールビューを作成または作成して表示するたびに、そのビューのまったく新しいインスタンスを作成するたびに、それについて何か教えない限り、以前のインスタンスについては何も知らないことに注意してください。

+0

すてきなデザイン。もし私がそれを理解できれば、私は考えていなかった、iOSのものの中で新鮮である。私は次のもののためにそれを掘りとテストします。 [iPad用デジタルコリジョン](http://itunes.apple.com/us/app/digital-collisions-hd/id511707721?mt=8)は、今アップグレードした関連アプリケーションです。 – gluon

関連する問題