Swift 3: Layout - TabBar in CollectionViewCell

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

  • Swift 3: Layout - TabBar in CollectionViewCell

    Hallo Liebe Community,

    Ich habe eine Klasse für einen TabBarController, die funktioniert. Auf der Startseite meiner App möchte ich durch Wischen (Swipe - Horizontal) zwischen drei Ansichten wechseln können. Die erste, also ganz links und die dritte, also ganz rechts, sollen eigenständige ViewController sein. In der Mitte möchte ich quasi den TabBarController benutzen können.

    Bisher habe ich es so versucht, dass ich als rootViewController in der AppDelegate einen CollectionViewController benutzt habe, bei dem jede Zelle so groß ist wie eine gesamte View.

    Das Problem dabei ist, dass ich durch diese Lösung momentan lediglich auf die .view des TabBarController zugreifen kann und somit nicht die einzelnen Tabs auf der Hauptseite benutzen kann - TabBar und NavigationItem sind dargestellt, allerdings nicht die Views der einzelnen Klassen (die im TabBarController hinzugefügt wurden).

    - Alles ist ohne Storyboard erstellt worden -

    Ich hoffe ihr könnt mir weiterhelfen,

    Liebe Grüße
  • ktmsx125 schrieb:

    Das Problem dabei ist, dass ich durch diese Lösung momentan lediglich auf die .view des TabBarController zugreifen kann und somit nicht die einzelnen Tabs auf der Hauptseite benutzen kann - TabBar und NavigationItem sind dargestellt, allerdings nicht die Views der einzelnen Klassen (die im TabBarController hinzugefügt wurden).
    So ohne Code ist mir nicht klar, warum Du nicht an die Views kommst. Diese erzeugst Du doch (irgendwie) selber, um sie der CollectionView zuzuweisen...

    Warum eigentlich eine CollectionView? Ich hätte ein Konstrukt per UIPageViewController erwartet. Sowas in der Art wie
    • UIPageViewController
      • ControllerA
      • UITabBarController
        • ControllerB1
        • ControllerB2
        • ControllerB3
      • ControllerC
    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Erstmal danke für die schnelle Antwort.

    Also innerhalb des CollectionViewControllers komme ich folgendermaßen an die Views:

    class CollectionViewController {

    var views = [TabBar().view]

    // func für cellForItemAt indexPath{

    let view = self.views[indexPath.item]
    let cell = collectionView.dequeueReusableCell (...)
    cell.contentView.addSubView(view!)
    return cell
    }

    (...)
    }
    Das Problem ist, dass ich lediglich die .view abrufe, sprich ich sehe dann auf der Startseite nur das navigationItem und die TabBar aber keinen Inhalt...

    Ich habe es nicht mit einem PageViewController gemacht, weil es mir bisher nur mit einer CollectionView gezeigt wurde. Wie könnte ich denn programmatisch den TabBarController einbauen?
  • Ich bin nicht der Spezi für CollectionViews, aber rein vom Konzept her müsstest Du doch drei Controller-Ebenen haben:
    1. ViewController für die drei Seiten
    2. ViewController der ersten Seite / TabBarController / ViewController der letzte Seite
    3. ViewController der verschiedenen TabBars
    Hierbei handelt es sich um Controller, nicht Views. Ich kann bzgl. CollectionView wohlgemerkt vollkommen falsch liegen, aber ich glaube, dass Du hier auf das falsche Pferd setzt ... ich lerne aber gerne dazu.

    Mattes

    P.S.: Wäre schön, wenn Du in Zukunft code-Tags für Quellcode verwenden könntest.
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe so das Gefühl, dass du den TabBarController „missbrauchst“. So wie ich das verstehe, enthält der TabViewController alle Views, die du darstellen willst, der TabBarController soll aber nur den mittleren verwalten und für die anderen beiden sollen eigene ViewController verwendet werden. Da stellt sich die Frage, warum nimmst du nicht gleich für jeden View einen eigenen ViewController? Welchen Zweck soll der TabBarController erfüllen?
    Dein aktuelles Konstrukt verursacht Probleme, die du gar nicht haben musst, weil du die falschen Controller verwendest.