Frage

Ich brauche etwas Hilfe bei der Auswahl der 'richtigen' Lösung für Folgendes "problem".

Ich verwende Sie die neue storyboard-Funktion, um link alle Bilder meiner Anwendung zusammen.Grundsätzlich ist die Struktur Bohrer unten zu:

[Navigation Controller] => [View-Controller #1] => [Tabbar-Controller] => [View-Controller #2]*

**(und einige andere Registerkarten, die sind jetzt nicht wichtig)*

Ich habe schonmal ein segue (push) aus dem ersten View-Controller (#1) auf den View-Controller hinter dem Tab-Bar-Controller.Dieser push wird ausgelöst, wenn der Benutzer drückt etwas auf dem ersten controller und funktioniert einwandfrei.

// Execute preset segue
[self performSegueWithIdentifier:@"segueEventDetail" sender:self];

Wenn der Benutzer (die nun in den View-Controller #2) drückt auf den zurück-button in der Navigationsleiste den Anwender wieder.Nehme an er löst jetzt die überleitung der zweite view-controller wieder gezeigt wird, ist aber nun 'Reset' (leer).(Ich glaube, nachdem ich mehrere Foren und Artikeln dies ist die standard-Verhalten bei der Verwendung segue ist, weil diese zu zerstören und reinitiliaze der view-controller, jedes mal, wenn?)

Dieser (der view-controller wird zurückgesetzt) stellt ein problem dar, weil der Inhalt des zweiten view-controller ist dynamisch (abhängig von der JSON-Antwort vom server) und somit ist es "gebraucht", dass der view-controller intakt bleibt (oder wiederhergestellt), wenn der Benutzer kommt zurück.

Ich habe gefunden verschiedenen Quellen (siehe unten) beschreiben das gleiche Problem, aber die Lösungen variieren und ich brauche etwas Hilfe bei der Auswahl der richtigen eins.

Zusammenfassen:

  • Wie kann ich 'behalten'/speichern der Staat von einem View-Controller, wenn der Benutzer drückt zurück, wobei die Verwendung von Storyboard & am besten auch in Segue s

Eigene Gedanken:

#1 Ich bin jetzt denken, das Zwischenspeichern der JSON-Antwort, um meine singleton-Klasse (und von dort zu einem PLIST) und das überprüfen in der zweiten view-controller, wenn diese Daten vorhanden sind und als eine Neuerstellung der Ansicht, nach der ich Suche nach neuen Daten (resume normal operation).

#2 Einem anderen eine, die ich denke, ist 'Umgehung' der Wechsel und manuell behandeln Sie das wechseln von Ansichten , teilweise erklärt (Storyboard - siehe ViewController in AppDelegate) - , Ist dies auch möglich?

Aber vielleicht gibt es eine einfachere/bessere Möglichkeit?

http://www.iphonedevsdk.com/forum/iphone-sdk-development/93913-retaining-data-when-using-storyboards.html Storyboard - siehe ViewController in AppDelegate Das serialisieren eines UIView?

War es hilfreich?

Lösung 2

Für jemand kommen, auf diese (meine) Frage in die Zukunft, dies ist, wie ich endete 'coding' es.

  • Öffnen Sie das storyboard und wählen Sie die "Tab-Bar-Controller", und öffnen Sie den Attributes Inspector

  • Füllen Sie einen 'identifier' in das Feld

  • Mit dem ersten view-controller (siehe Szenario im original-Beitrag) ich erstelle eine Globale Referenz auf die viewcontroller:

firstviewcontroller.h

@interface YourViewController : UIViewController {

    UITabBarController *tabController;

}

firstviewcontroller.m

//Fill the reference to the tabcontroller using the identifier
tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

Nun wechseln Sie von der firstviewcontroller die folgende Zeile verwendet werden:

[[self navigationController] pushViewController:tabController animated:YES];

Andere Tipps

Yess!!Ich habe die Lösung.Tun Sie den folgenden:

In Sie sind .h-Datei:

@property (strong, nonatomic) UITabBarController *tabController;

In Sie sind .m Datei:

@synthesize tabController;

tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbar"];

Der ausgewählte index ist die Registerkarte, die Sie gehen wollen

tabController.selectedIndex = 1;

[[self navigationController] pushViewController:tabController animated:YES];

Dies könnte noch mehr einfache Lösung (ohne Eigenschaften, in der Tat, alle Ihre Klassen-Instanzen brauchen nicht zu wissen, über Ihre Ziel-Controller, also speichern Sie ihn einfach als statische, in die schieben-Funktion):

static UIVewController *destController = nil;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
if (!storyboard) {
    DLog(Storyboard not found);
    return;
}
if (destController == nil) { //first initialisation of destController
    destController = [storyboard instantiateViewControllerWithIdentifier:@"{Your Destination controller identifyer}"];
    if(!destController) {
        DLog(destController not found)
        return;
    }
}
//set any additional destController's properties;
[self.navigationController pushViewController:destController animated:YES];

p.en. DLog ist nur meine Variante der NSLog.

Aber es ist wirklich interessant, wie dies mit den segue?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top