UINavigationController?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UINavigationController?

    Meine App ist in verschiedene Schritte unterteilt, die hintereinander abgearbeitet werden und eine Rückkehr zu vorherigen Schritten erlauben. Daher habe ich für die Navigation einen Navigation Controller verwendet. Die einzelnen Schritten haben jeweils eigene View Controller mit einem eigenen NIB für das UI.

    Jetzt möchte ich mir beim Beenden der App gerne den aktuellen Schritt merken und bei einem Neustart direkt mit diesem Schritt auf dem Navigation Controller weitermachen. Leider bekomme ich es nicht hin die erforderlichen View Controller bis zum besagten Schritt auf den Navigation Stack zu packen ohne dass mir das UI und die Navigation im Stack "abschmiert"?

    Ich hätte vermutet, dass ich die View Controller einfach mit pushViewController:xxx animated:NO auf den Navigation Stack packe und gut ist. Leider wird dabei nicht das View zum letzten View Controller angezeigt, sondern ein vorheriges. Die Navigation im Stack funktioniert danach auch nicht mehr richtig, da bei einem "Rückschritt" zum vorherigen View Controller auf dem Stack, das UI überhaupt nicht mehr angepasst wird und somit immer das selbe View angezeigt wird. Der "Zurück" Button oben links hat dabei auch nicht die richtige Beschriftung zum vorherigen View Controller.

    Mache ich hier etwas grundlegend falsch oder habe ich das Prinzip des Navigation Controller nicht richtig verstanden und man kann Schritte in der Navigation gar nicht per Programm überspringen?
  • RE: UINavigationController?

    Kommt sicherlich auch drauf an, wie abhängig die Schritte voneinander sind. Du musst Dir doch sowieso abspeichern, was das Ergebnis des Schritt A, B und C war um dann mit D weiterzumachen. Oder zumindest was das Ergebnis von C war, wenn C von A und B abhängig sind. Beim Starten der App fragst Du einfach ab, wo der letzte Schritt war und erzeugst dann den entsprechenden UIViewController und fütterst den UINavigationController Deiner App damit. Fertisch ist der Lack. Meines Wissen musst Du nicht A, B im Stack haben!? Wozu auch?
  • Laß Dir doch einfach mit viewControllers alle geben und speicher die ab.

    Edit: grundsätzlich spricht nichts dagegen, da auch programmatisch welche vom Stack zu popen. (poppen?) Auch mehrere zu überspringen mit popToViewController:animated:
    ist kein Ding.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Ich habe eine App mit wohl ähnlicher "Tiefennavigation" und habe für den jeweils nächst-tieferen Schritt AppController Methoden, welche Daten laden und den nächsten ViewController auf den NaviController pushen. Beim Neustart der App rufe ich einfach der Reihe nach die entsprechenden Methoden auf, welche Nacheinander die Daten laden und ihren ViewController pushen (mit animated:NO) bis ich bei der gewünschten Tiefe angelangt bin. Klappt wunderbar, das geht sogar so schnell dass man die Zwischenschritte gar nicht sieht und die App direkt im Ziel-View landet.
    Widgetschmie.de • Life is too short for gadgets
  • Original von Pascal
    Ich habe eine App mit wohl ähnlicher "Tiefennavigation" und habe für den jeweils nächst-tieferen Schritt AppController Methoden, welche Daten laden und den nächsten ViewController auf den NaviController pushen. Beim Neustart der App rufe ich einfach der Reihe nach die entsprechenden Methoden auf, welche Nacheinander die Daten laden und ihren ViewController pushen (mit animated:NO) bis ich bei der gewünschten Tiefe angelangt bin. Klappt wunderbar, das geht sogar so schnell dass man die Zwischenschritte gar nicht sieht und die App direkt im Ziel-View landet.

    Interessant, bei mir werden dabei die Views jedoch nicht korrekt aktualisiert, so dass nicht der View des letzten sondern des vorletzten View Controllers angezeigt wird. Weiterhin hat der Back-Button zum vorherigen View Controller eine falsche Beschriftung.

    Setzt Du die Werte des NavigationItem des View Controllers per NIB (also title und rightBarButtonItem) oder per Code?

    Setzt Du den title des View Controllers und/oder des NavigationItem?
  • Hmm, dein Problem ist seltsam. Entschuldige die dumme Frage, aber speicherst du denn auch den richtigen ViewController beim Quit?
    Ich mache alles per Code und benutze lediglich [UIVavigationController pushViewController: animated:], passe aber dann in der viewWillAppear: des betroffenen Controllers den title und den Titel des Back-Buttons an, weil die dynamisch sind.

    Meine App ist Open Source, vielleicht hilft dir das: code.google.com/p/eponyms-touch/source/browse/

    In eponyms_touchAppDelegate.m ab Zeile 133 stelle ich den State wieder her, was gemacht wird sollte in den dort gerufenen Methoden ersichtlich sein. Ich hoffe das hilft. :)
    Widgetschmie.de • Life is too short for gadgets
  • Original von Tom9811
    Wäre es nicht sogar schön, die einzelnen Schritte schnell animiert anzuzeigen?

    Das habe ich nicht gemacht, weil ich die App möglichst schnell benutzen will. Das übertriebene hin- und hergeschwenke in manchen Apps kann ich nicht verstehen, auch wenns schön aussieht.
    Widgetschmie.de • Life is too short for gadgets
  • Original von Pascal
    Hmm, dein Problem ist seltsam. Entschuldige die dumme Frage, aber speicherst du denn auch den richtigen ViewController beim Quit?
    Ich mache alles per Code und benutze lediglich [UIVavigationController pushViewController: animated:], passe aber dann in der viewWillAppear: des betroffenen Controllers den title und den Titel des Back-Buttons an, weil die dynamisch sind.

    Ich setzte die Werte des NavigationItem des View Controllers bisher im NIB. Ich werde mal versuchen dies auch per Code in der viewWillAppear: Methode zu erledigen.

    Es sollte mich eigentlich nicht wundern, wenn es der NavigationController nicht geregelt bekommt, die Werte aus dem NIB zu übernehmen, wenn man den ViewController ohne Animation auf den Stack packt.