TabBar verschwindet nachdem ein Segue benutzt wurde

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

  • TabBar verschwindet nachdem ein Segue benutzt wurde

    Hallo,

    ich habe gerade das Problem das wenn ich über einen Segue zu meinem vorherigen ViewController gelangen möchte die darin enthaltene TabBar nicht mehr angezeigt wird, meine NavigationBar aber schon.

    Das Projekt ist wie folgt aufgebaut:

    TabBarController -> NavigationController -> CollectionViewController123 <- die beiden sind nicht über einen Segue verbunden -> TableViewController -> CollectionViewController123

    Weiß jemand was ich machen muss damit meine TabBar auch zu sehen ist ?

    Quellcode

    1. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    2. if segue.identifier == "backToImagePicker" {
    3. if let indexPath = albumTableView.indexPathForSelectedRow {
    4. let destinationViewController = segue.destination as! CollectionViewController
    5. let collection = smartAlbums.object(at: indexPath.row)
    6. let fetchOptions = PHFetchOptions()
    7. fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    8. guard let assetCollection = collection as? PHAssetCollection
    9. else { fatalError("Expected an asset collection.") }
    10. fetchResult = PHAsset.fetchAssets(in: assetCollection, options: fetchOptions)
    11. destinationViewController.fetchResult = fetchResult
    12. destinationViewController.buttonTitle = collection.localizedTitle!
    13. }
    14. }
    15. }
    Alles anzeigen
  • Okay ich versuche es nochmal ein wenig deutlicher darzustellen:

    TabBarController
    ↓ ↓
    NavigationViewController NavigationViewController
    ↓ ↓
    CollectionViewController1 ViewController


    NavigationViewController

    TableViewController

    CollectionViewController1


    So ging leider nicht schöner aber ich hoffe das macht es jetzt leichter. Die zwei Pfeile stehen jeweils für eine Verbindung. Wie in meinem Schema zu sehen ist steht der TableViewController/NavigationViewController frei und wird nicht über einen direkten Segue erreicht sondern über folgende Funktion:

    Quellcode

    1. @objc func clickOnButton() {
    2. if let destinationViewController = storyboard?.instantiateViewController(withIdentifier: "rootAlbumViewController") {
    3. present(destinationViewController, animated: true, completion: nil)
    4. }
    5. }

    Jetzt ist mein TableViewController aber über einen direkten Segue mit dem CollectionViewController verbunden der Teil meiner TabBar ist. Versuche ich aber über diesen Segue (Siehe Post #1) zu meinem CollectionViewController zu gelangen, ist die TabBar nicht mehr sichtbar...








  • Mir ist der Aufbau immer noch nicht ganz klar.

    Dein Root View Controller ist ein TabBarController mit nur einem Tab welcher einen NavigationViewController enthält. Dies ist mir schon nicht ganz klar, da ein TabBarController erst bei min. 2 Tabs sinnvoll ist Warum verwendest Du hier einen TabBarController?
  • Nein. Selbstverständlich sind in meinem TabBarController 2 Tabs. Das sollen die zwei Pfeile darstellen.

    Also wie gesagt es sind 2 Tabs enthalten, CollectionViewController1 und ViewController (siehe Schema).

    Beide sind separat in einem NavigationController eingebunden.

    Bedeutet also mein TabBarController ist der RootViewController mit 2 Tabs die jeweils einen NavigationController beinhalten. Die beiden NavigationController beinhalten dann wiederum den CollectionViewController1 und ViewController.



    Ich hoffe dieses mal ist es deutlicher geworden haha :)
  • Haha sehr gut.

    Also ich rufe meinen TableViewController/NavigationViewController per Code auf das hast du richtig erkannt.

    Nun möchte ich aber von meinem TableViewController/NavigationViewController wieder meinen Tab mit dem CollectionViewController aufrufen. Dazu habe ich auch den Segue verwendet. Nur wenn ich den CollectionViewController über den Segue aufrufe, fehlt leider die TabBar :/
  • Wenn Du den TableViewController/NavigationViewController per Code anzeigst, dann solltest Du die Anzeige auch per Code mit einem dismiss(animated:completion:) wieder beenden.

    Alternativ musst Du wohl auch eine Segue für die Anzeige und dann eine Unwind Segue zum Beenden verwenden. Ob eine Unwind Segue evtl. auch ohne vorherige Segue funktioniert weiss ich nicht und dies müsstest Du mal ausprobieren.
  • Ja über einen dismiss habe ich auch schon nachgedacht.

    Mein Problem damit ist jedoch folgendes:
    In meinem TableViewController/NavigationViewController habe ich eine Reihe von Begriffen aufgelistet. Klicke ich nun auf eine der Zellen möchte ich das ein String in meinem CollectionViewController diesen jeweiligen Begriff annimmt.

    Also klar könnte ich einfach ein dismiss ausführen aber dann ist die Transportfähigkeit von Variablen etwas schwierig. Deshalb hatte ich an einen Segue gedacht. Gibt es vielleicht noch andere gute Alternativen die sich mit einem dismiss kombinieren lassen ?