Swift: UINavigationController programmatisch eine Ebene zurück

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

  • Swift: UINavigationController programmatisch eine Ebene zurück

    Ich mache gerade meine ersten Schritte mit Swift und iOS. Leider komme ich an folgendem Punkt nicht weiter: Ich habe einen UITableView mit einer UISearchBar, die nach einem "Klick" auf einem BarButton in einem NavigationController erscheinen. Den Übergang inkl. Segue habe ich hinbekommen. Probleme bereitet mir nun das "zurück kommen". In der SearchBar gibt es ja einen Cancel Button. Diesen habe ich versucht mit...

    Quellcode

    1. func didDismissSearchController(searchController: UISearchController) {
    2. print("test")
    3. }
    ... abzufangen. Funktioniert offenbar auch, ich finde nur leider nicht heraus, wie ich im NavigationController programmatisch wieder eine Ebene "zurück" komme?

    Wäre toll, wenn jemand helfen könnte!
  • Also ich befinde mich in meinem oben beschriebenen TableViewController mit der SearchBar. Wenn ich unter didDismissSearchController folgendes versuche: myNavigationController.popViewControllerAnimated(self) erhalte ich die Compiler-Warnung: Cannot convert value of type 'mySearchTableViewController' to expected argument type 'UINavigationController'. Was genau wird hier erwartet? Der aktuelle View ist ein UITableViewController.
  • Du benennst Deinen SerachTableController als myNavigationController nehme ich mal an. Dadurch wird er aber noch lange nciht zu einem NavigationController....

    Versuch es mal mit myNavigationController.navigationController.popVIewController... (oder so ähnlich)
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • myNavigationController ist ein UINavigationController. Darin ist ein UITableViewController eingebettet (der inital ViewController). Von diesem aus gelange ich über einen BarButton in der NavigationBar zu mySearchTableViewController, das den Protokollen UITableViewController, UISearchResultsUpdating und UISearchControllerDelegate folgt.


    Quellcode

    1. class mySearchTableViewController : UITableViewController, UISearchResultsUpdating, UISearchControllerDelegate {
    2. // ...
    3. }

    Letzterer View ist gerade sichtbar und soll mittels Tap auf den "Cancel"-Button von var resultSearchController = UISearchController() wieder verschwinden, um auf den initialen UITableViewController zurückzukehren.
  • Ich vermute meinen Fehler mittlerweile eher im Storyboard. Anbei mal ein Screenshot. Es geht um den Search Table Controller unten: Der Segue geht vom Lupen-Icon des tableViews darüber aus. Ist der SearchTable damit überhaupt im NavigationController embedded?

    Wie gesagt, es gelingt mir leider nicht, den SearchTable auszublenden. Unschön ist auch, dass die searchBar momentan noch in den visuellen Bereich Carrier/Uhrzeit/Ladebalken überlappt.
    Dateien
  • mrtn.lxo schrieb:

    nussratte schrieb:

    warum beantwortest du nicht die Fragen oder machst das was man dir geraten hat?
    Ich dachte das hätte ich.
    searchController.navigationController?.popViewControllerAnimated(true) hat leider keinen Effekt.
    Ts, ts, du nutzt die Null-Pointer-Sicherheit in Swift ja nicht aus*: searchController.navigationController!.popViewControllerAnimated(true).

    Da erfindet Herr Lattner so geile Features, und du ignorierst sie einfach. :D +scnr+

    * Das löst nicht dein Problem; hilft dir aber vielleicht es zu finden. ;)
    „Meine Komplikation hatte eine Komplikation.“