Okay, bei der Entwicklung meiner neuesten App habe ich festgestellt, dass mein storyboard
sehr groß geworden ist, also habe ich es in multiple storyboards
aufgeteilt, bevor es außer Kontrolle gerät. nur für Einstellungen allein habe ich etwa 20 tableviewcontrollers
, die von einem root NavigationController
abzweigen. Das navigationcontroller
war ein TabItem auf einem TabBarController
, was der application's
Root-View-Controller ist.
Ich habe die TabBar
in ihre eigene StoryBoard
als Root_Storyboard
verschoben und der Navigations-Controller ist nun die erste Ansicht der Settings_Storyboard.
Nur zu Testzwecken habe ich ein paar UIViewControllers
als Tab-Elemente in das TabBarController
(Root_Storyboard) und das untergeordnete gesetzt und den folgenden Code zu seiner viewWillAppear
-Methode hinzugefügt. Es funktioniert gut, aber ich weiß, dass das presentViewController
das NavigationController
modal anzeigt und das tabBar
ausblendet. Offensichtlich will ich das nicht, wie bekomme ich es richtig zu schieben, damit das TabBar
sichtbar bleibt?
Bearbeiten - Um zu klären. Der obige Code ist die Unterklasse-Methode für ein UIViewController (child of UITabBarController:index(1))
in der Root_iPhone.storyboard. Die UINavigationController/UITableViewController
, die ich zu laden versuche, findet sich in Settings_iPhone.storyboard
. Ich bin mir nicht sicher, wie ich die in dieser Situation vorgeschlagene LinkView implementieren soll.
Dies ist durchaus möglich und ein kluger Schachzug - das Entschlüsseln Ihrer Storyboards bietet sauberere Schnittstellendateien zum Durchforsten, reduzierte Ladezeiten in XCode und bessere Gruppenbearbeitung.
Ich habe schon eine Weile über Stack Overflow hinweg gekämmt und bemerkt, dass jeder auf Custom Segues zurückgreift oder tabbasierte Setups programmatisch instanziiert. Huch. Ich habe eine einfache UIViewController-Unterklasse zusammengehackt, die Sie als Platzhalter für Ihre Storyboards verwenden können.
Code:
Header-Datei:
%Vor%Implementierungsdatei:
%Vor%Beschreibung:
Verwendung:
Um es zu verwenden, weisen Sie es als Unterklasse eines UIViewController in Ihrem Storyboard zu, das zu einem UINavigationController gehört.
Weisen Sie ihm eine Wiederherstellungs-ID zu und Sie können loslegen.
Einrichtung:
Und so richten Sie es im Storyboard ein:
Dieses Setup zeigt einen Tab-Controller mit Navigations-Controllern als ersten Tab-Controller. Jeder Navigations-Controller hat einen einfachen UIViewController als Root-View-Controller (ich habe UIImageViews zu den Platzhaltern hinzugefügt, damit Sie leicht merken können, wozu er verlinkt ist). Jede von ihnen ist eine Unterklasse von TVStoryboardViewController. Jeder hat eine Wiederherstellungs-ID, die auf das Storyboard gesetzt ist, mit dem er verlinken soll.
Einige gewinnen hier:
Einige Einschränkungen:
Dieser Ansatz wurde gehackt, um dieses UITabBarController-Problem zu lösen, also verwenden Sie es als Teillösung für ein größeres Problem. Ich hoffe, dass Apple die Unterstützung für mehrere Storyboards verbessert. Für den UITabBarController Setup sollte es jedoch ein Leckerbissen funktionieren.
Nicht sicher, ob Ihre Frage beantwortet wurde, und für andere, die nach einer Lösung für dieses Problem suchen, versuchen Sie diese Methode.
In RedirectViewController.m codieren Sie dies:
%Vor% Die Lösung ist noch nicht vollständig! Sie sehen "& lt; Zurück" als das linke Navigationselement auf SettingsViewController. Verwenden Sie die folgende Zeile in der viewDidLoad
-Methode:
Um zu verhindern, dass das gleiche Registerkartenelement angetippt wird und ein Sprung zurück zum leeren rootViewController erfolgt, müssen die Zielansichts-Controller UITabBarControllerDelegate implementieren
%Vor%Es funktioniert für mich.
Dies ist ein bisschen spät für Hawke_Pilot, aber es könnte anderen helfen.
Ab iOS 9.0 können Sie eine Beziehung zu einem anderen Storyboard erstellen. Dies bedeutet, dass Tab-Bar-View-Controller mit View-Controllern auf einem anderen Storyboard verknüpft werden können, ohne dass einige der verwirrenden Tricks in den anderen Antworten angezeigt werden. : -)
Dies allein hilft jedoch nicht, da der Empfänger im anderen Storyboard nicht weiß, dass er mit einem Tab Bar View Controller verbunden ist und die Tab-Leiste nicht zur Bearbeitung anzeigt. Alles, was Sie tun müssen, wenn Sie den Storyboard-Verweis auf den gewünschten View-Controller richten, wählen Sie den Storyboard-Verweis und dann Editor- & gt; Einbetten- & gt; Navigations-Controller. Dies bedeutet, dass der Nav Controller weiß, dass er mit einem Tab Bar View Controller verbunden ist, da er sich auf demselben Storyboard befindet und unten die Tab-Leiste anzeigt und die Bearbeitung von Button-Bild und Titel erlaubt. Kein Code erforderlich.
Zugegebenermaßen mag dies nicht für jeden geeignet sein, kann aber für das OP funktionieren.
Fügen Sie folgenden Code zu Ihrem LinkViewController
hinzu %Vor% Hier ist der Screenshot für LinkViewController .
LinkViewController ist nur ein Platzhalter, an dem ein neuer viewController platziert wird. Hier ist der Beispielcode, den ich für meine App verwendet habe.
RBStoryboardLink . Es funktioniert großartig für mich. Lass es mich wissen, wenn es für dich hilfreich ist.
Tags und Links objective-c iphone ios storyboard uitabbarcontroller