Xcode 8 Swift 3 ViewController

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

  • Xcode 8 Swift 3 ViewController

    Hallo zusammen,

    meine App hat nachfolgenden Aufbau im Storyboard: Navigation Controller -> ViewController(View) -> TableViewController(Master) -> ViewController(Detail)

    Wenn ich nun aus (Detail) mittels des BACK-Buttons zurückspringe dann wird (View) angezeigt.

    Soweit okay. Nun will ich aber direkt zu (Master). Hierfür habe ich
    "_ = navigationController?.popToRootViewController(animated: true)"
    durch
    "let masterSummary = UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: "Übersicht") as! UITableViewController
    let appDelegate = (UIApplication.shared.delegate as! AppDelegate)
    appDelegate.window?.rootViewController = masterSummary"
    ersetzt.
    Es wird auch (Master) angezeigt nur schiebt sich die Tabelle über das obere Drittel der Ansicht.

    Wieso ist dies so und wie kann dies vermeiden werden?

    Vielen Dank für Euere Unterstützung.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von OSXDev ()

  • ehrlich gesagt glaube ich nicht das das wirklich richtig funktioniert. Denn Du pushed den Controller ja nun oben drauf statt zu ihm zurück zu kehren. Irgendwann hast du auf die Art und weise 500 ViewController übereiander....
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • @Thallus: Deinen Hinweis werde ich evaluieren. Werde die App per Debugger daraufhin untersuchen ob ein neuer Controller angelegt wird. Falls dies so ist, dann stimme ich Dir zu, dass dies nicht mein entsinnen ist.

    @MCDan: ;) Muss dazu anmerken, dass ich die Beschreibung mehrmals ediert habe und da ist mir wohl etwas abhanden gekommen. :(

    Deshalb hier noch einmal:
    Aufbau im Storyboard: Navigation Controller -> ViewController(View) -> TableViewController(Master) -> ViewController(Detail) -> ViewController(Statistic)

    Wenn ich nun innerhalb von Detail den BACK-Button anwende (Ursprungssourcecode s. o.) lande ich im Master. (Das ist gewollt.)
    Innerhalb von Statistic lande ich in Detail und dies möchte ich nicht. Auch hier möchte ich im Master landen.
  • Da gibt es mehrere Möglichkeiten.

    Um beim Zurückgehen auf dem Navigation Stack einen oder mehrere View Controller auszulassen, gibt es die Methode popToViewController:animated: Allerdings funktioniert dies nicht ohne weiteres mit dem Default Back Button des NavigationControllers.

    Wenn man immer von Statistic direkt zurück auf Master gelangen soll, dann könnte man den Detail ViewController auch vom Stack des Navigation Controllers entfernen. Dazu würde sich z.B. die Methode viewDidAppear: im Statistic ViewController anbieten. Der Default Back Button geht ja immer zum vorherigen View Controller auf dem Navigation Stack und dieser wäre dann der Master View Controller.

    Alternativ kannst Du mal in der Methode vieWillAppear: vom Detail View Controller ausprobieren, ob Du dort direkt ein popViewControllerAnimated: aufrufen kannst, wenn Du vom Statistic View Controller kommst. Da müsstest Du mal ausprobieren, ob Du popViewControllerAnimated:YES oder popViewControllerAnimated:NO verwenden musst.

    Eine weitere Möglichkeit ist das UINavigationControllerDelegate Protocol des UINavigationController Delegate. Dort gibt es die Methode navigationController:willShowViewController:animated: Dort sollte ggf. auch ein popViewControllerAnimated: funktionieren.

    Was auch funktionieren könnte wäre, im Detail View Controller beim Anzeigen des Statistic View Controller ein popViewControllerAnimated:NO mit direktem pushViewController:animated:YES für den Statistic View Controller zu verwenden.

    BTW: Wenn Du ein Storyboard verwendest, dann solltest Du eigentlich eine Unwind Segue vom Statistic View Controller auf den Master View Controller definieren können. ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MCDan ()