2012-04-13 11 views
0

Ich habe ein grundlegendes modales Ansichtsystem.Das Verschwinden einer Ansicht lässt alle Werte verschwinden ... viewWillAppear als Heilmittel?

Meine App lädt die UI-Basis, in der 2 Schaltflächen mit 2 anderen Ansichten angezeigt werden. In diesen Ansichten eine Schaltfläche zum Schließen.

Alles funktioniert gut.

ABER, in einer der 2 modalen Ansichten, habe ich eine Reihe von UISlider & UISwitch. Ich möchte, dass sie ihre Werte behalten, aber die Kündigung verliert sie: Sobald ich die Schaltfläche zum Anzeigen der Ansicht, die die UI-Elemente enthält, auslösen, wird diese Ansicht mit allen Werten für alle Elemente angezeigt, wie ich zunächst in der Xib.

sollte ich alle Werte in Variablen speichern, dann in ViewWillAppear konnte ich sie "erinnern"?

würden Sie mir eine andere Strategie empfehlen?

+0

Wenn eine Ansicht freigegeben wird, wie können Sie erwarten, dass sie ihre Werte beibehält? – CodaFi

+0

Vor allem, ich erwarte nicht und du antwortest auch nicht. – gluon

Antwort

2

Ja, Ihre vorgeschlagene Vorgehensweise ist genau das Richtige. Aber sei vorsichtig; viewWillAppear kann aus vielen Gründen aufgerufen werden; stellen Sie sicher, dass Sie dies nur tun, wenn der View-Controller erstellt wird und die Ansicht zum ersten Mal anzeigt.

NSUserDefaults kann ein ausgezeichneter Ort sein, um global benötigte Informationen wie diese zu speichern. Speichern Sie in viewWillDisappear die gewünschten Statusinformationen (Werte der Schieberegler und Schalter) in den Standardeinstellungen. Rufen Sie sie dann beim nächsten Aufruf der Ansicht ab.

+0

Ich habe es über NSUserDefaults! Mit OpenFrameworks habe ich herausgefunden, dass ich auch Dinge auf der OF-Seite speichern kann. Es kann ein nettes und einfaches Entwurfsmuster in meinem Fall sein. Vielen Dank für deine Antwort! – gluon

2

Wenn Sie die modale Ansicht erstellen, erstellen Sie eine neue Instanz von modalViewController und modalView. Diese neue Instanz kennt keine anderen Instanzen. Es gibt einige Möglichkeiten, wie Sie die Informationen aus früheren Iterationen dieser Modalansicht-Controller beibehalten können.

Wie würde ich es tun: Platzhalter in Ihrer Hauptansicht einrichten und übergeben Sie die Werte, die der Benutzer wählt zurück in die Hauptansicht über ein Protokoll und Delegieren von Setup. Wenn Sie dann in die modale Ansicht wechseln, können Sie diese Variablen laden, bevor Sie die modale Ansicht anzeigen.

Angenommen, Sie haben ein Wörterbuch mit allen Werten: {slider = YES, someValue = 10, ...} Erstellen Sie dieses Wörterbuch im Hauptansicht-Controller, der erste, der geöffnet wird, und legen Sie einige Standardwerte fest drin.

In Ihrer modalen Ansicht erstellen Controller das gleiche Wörterbuch wie eine Eigenschaft.

Erstellen Sie ein Protokoll in Ihrem modal View-Controller mit einem Verfahren, das

so etwas wie

- (void) doneEditing:(NSDictionary *)values ist

Richten Sie Ihren ersten Blick als Delegierter für den Modal-View-Controller und bei der Umsetzung von doneEditing kopieren Sie die Werte zu dem Wörterbuch, das in der ersten Ansicht vorhanden ist, bevor die modale Ansicht angezeigt wird.

Wenn die erste Ansicht bereit ist, die modale Ansicht erneut anzuzeigen, kopieren Sie die Werte in die Wörterbucheigenschaft der modalen Ansicht, bevor Sie sie präsentieren.

Ich hoffe, das bringt Sie in die richtige Richtung. Es ist wichtig, sich daran zu erinnern, dass Sie jedes Mal, wenn Sie eine modale Ansicht durchgehen oder erstellen und präsentieren, eine brandneue Instanz dieser Ansicht erstellen, die nichts über die vorherige Instanz weiß, es sei denn, Sie sagen etwas darüber.

+0

Schönes Design. wenn ich es verstehen kann, habe ich nicht darüber nachgedacht, in iOS-Dingen frisch zu sein. Ich grabe und teste das für das nächste Zeug. [Digital Collisions for iPad] (http://itunes.apple.com/us/app/digital-collisions-hd/id511707721?mt=8) ist die entsprechende Anwendung, die ich gerade aktualisiert habe. – gluon