Situation: zwei UITabBarControllers, jede mit ihren eigenen Tabs, aber die letzte Registerkarte in beide ist identisch, also will one UIViewController Inhalte zeigen.
Problem zur Laufzeit: Das freigegebene Element wird nur in eins der Registerkartensätze angezeigt, wenn es angezeigt wird.
Frage: Jeder weiß, wie das funktioniert?
Link zur externen Grafik des Storyboard-Setups: (Entschuldigung, habe nicht genug Reputation, um Bilder hier zu posten!) Storyboard-Grafik
Ein Xcode-Projekt mit diesem Storyboard: XCode-Projekt
Jedes Tab-Inhaltselement besitzt eine eigene UIViewController-Klasse. Sie enthalten keinen Code außer der Zeile, mit der die Zurück-Schaltflächen funktionieren sollen.
(Ja, ich weiß, das ist seltsam. Wirkliche Situation ist eine iPad-App, wo Tab-Controller in Popovers angezeigt werden; Popovers sind "Property-Editoren", wo verschiedene Objekte unterschiedliche Eigenschaften haben, aber alle einen gemeinsamen Satz von Eigenschaften ... also ein Tab für "einzigartige" Requisiten, ein gemeinsamer Tab-Inhalt für die "gemeinsamen" Requisiten, die alle Objekte haben.)
Ich habe ein paar Wege gefunden, um den gewünschten Effekt zu erzielen, aber wenn dieses Storyboard funktioniert, wäre es eine viel einfachere Lösung.
- Andere Informationen, die mit der Frage nichts zu tun haben -
Alternative Lösung, die ich verwende: TabBarControllers verknüpfen nur zu einem VC als Tab-Inhalt. Wenn diese Registerkarte VC lädt, verwende ich Code, um (a) freigegebene VC vom Storyboard nach Bezeichner zu instantiieren, (b) das neue VC-Objekt über [tabController setViewControllers: list animated: NO] dem TabBarController hinzuzufügen.
(Eine weitere mögliche Lösung, die ich noch weniger mag: keinen TabBarController verwenden und VCs von Inhalten mit einer eigenen "Tab" -Grafik darstellen, die jeweils "mich" als ausgewählt zeigt. Yuk.)
Ich habe also eine funktionierende Lösung, ich bin nur neugierig, warum das nicht funktioniert (nur eine bekannte Sache in iOS API oder eine magische Eigenschaft Einstellung, die es funktionsfähig machen könnte?)
Sie können dieselbe View-Controller-Instanz nicht in zwei Registerkarten-Controller einfügen. Das Problem ist, dass eine View-Instanz ( UIView
) nur eine übergeordnete Ansicht haben kann ( superview
). Wenn Sie versuchen, den Ansichtscontroller der zweiten Registerkarte hinzuzufügen, wird die Ansichtsansicht des Ansichtscontrollers von der ersten übergeordnet (die erste Registerkarte) entfernt und dann zur zweiten Registerkarte hinzugefügt.
Ich bin über Ihren Thread gestolpert, als ich heute in dieselbe Ausgabe gerannt bin ... Die Lösung besteht darin, ein Duplikat des View-Controllers im Storyboard zu erstellen und das Duplikat an den anderen Tab-Controller anzuhängen. Ich habe es einfach gemacht und es funktioniert ... Ich denke, der 'rdelmar' hat recht damit ... kopiere es und setze es ... !!
Ich bin heute über dasselbe Thema gestolpert. Ich schaffte es, eine Workaround zu finden, die den Trick zu machen scheint. Der Schlüssel besteht darin, eine Trennungsschicht zwischen der Registerkarte und dem Controller hinzuzufügen, den Sie wiederverwenden möchten. Von jeder Registerkarte habe ich eine Beziehung zu einem eindeutigen UIViewController mit einer Containeransicht erstellt. Dann können Sie einen 'Einbettungs'-Übergang vom Container zum Controller durchführen, den Sie tatsächlich als Registerkartenansicht verwenden möchten. Es ist nicht so sauber wie eine direkte Verbindung (nicht sicher, warum das nicht unterstützt wird), da Sie für jeden Wiederverwendungsfall eine Controller-Klasse erstellen müssen. Es ist immer noch eine bessere Lösung als der Albtraum, die tatsächliche Registerkartenansicht (sowie alle zusätzlichen Ansichten, die sich damit verbinden) für jede Verwendung duplizieren zu müssen.
Hoffe, das hilft. Lassen Sie mich wissen, wenn jemand mehr Details benötigt.
Tags und Links ios uitabbarcontroller