2016-03-25 7 views
0

Ich benutze zum ersten Mal Storyboards. Es läuft meistens gut, aber eine Situation ist sehr unklar:Storyboards und UITabBarControllers

Ich verwende einen Tab-Bar-Controller als meine anfängliche View-Controller. Ich habe drei Registerkarten, und sie sind jeweils eine Instanz der gleichen View-Controller-Klasse, mit dem einzigen Unterschied, dass ich ein anderes Array an jede Instanz übergeben möchte, um unterschiedliche Daten anzuzeigen.

Mein Gedanke war ich prepareForSegue: in der UITabBarController Instanz nutzen, um die richtige Anordnung zu jedem Ziel-View-Controller passieren ... aber vielleicht UITabBarController nicht mit segues jeden View-Controller in einem Tab angezeigt werden, weil es in IB keine Möglichkeit zu Geben Sie eine Storyboard-ID für den "Übergang" zum Inhalt der Registerkarte an. (Wenn ich das Segment wähle, das den Tab-Controller mit dem Kind-Controller verbindet, sagt IB nur "Nicht anwendbar" im Anpassungsbereich.)

Also meine Frage ist: wie kann ich mit dieser Situation in IB umgehen?

Antwort

0

UITabBarController verwendet Segmente, aber es ist eine besondere Art von Segmenten. Wählen Sie im IB einen UITabBarController aus, und öffnen Sie im Bereich Dienstprogramme den Inspektor Verbindungen. Sie werden sehen, dass im unteren Bereich (die von prepareForSegue behandelt werden) und den ausgelösten Segmenten, die viewControllers Segmente enthalten, Presenting Segues vorhanden sind. Dies sind die Übergänge zu Tabs innerhalb einer Tab-Leiste. Sie sind nicht wirklich Übergänge, sie sind mehr wie Referenzen.

Um eine Klasse für drei verschiedene Ansichtscontroller als Registerkarten in IB zu verwenden, sollten Sie drei leere (oder nicht) Ansichtscontroller als Registerkarten hinzufügen und ihre Klasse mithilfe des Identity Inspector im Bereich Dienstprogramme angeben. Die Klasse kann für alle drei gleich sein.

+0

Danke. Wie lege ich die Storyboard-ID für eines dieser Segmente fest, damit ich identifizieren kann, welches im Code ist? –

+0

@GregMaletic, ich fürchte, es ist nicht möglich mit 'PrepareForSegue'. Eine mögliche Lösung wäre, eine benutzerdefinierte UITabBarController-Unterklasse zu implementieren, sie zu einem Delegaten der Registerkartenleiste zu machen und '- (void) tabBarController zu verarbeiten: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController' (eigentlich würden Sie brauche eine benutzerdefinierte Unterklasse, um 'prepareForSegue' trotzdem zu implementieren. – FreeNickname

+0

@GregMaletic, tut mir leid, es ist nicht 'UITabBarDelegate', es ist' UITabBarControllerDelegate'. Und wahrscheinlich ist es eine bessere Idee, stattdessen 'shouldSelectViewController' zu verwenden (anpassen und true zurückgeben). Aber "didSelect" könnte auch OK sein. – FreeNickname