Xcode 6 - Swift - Benutzerdefiniertes Tabbar mit Navigation
Ich versuche zu schaffen, eine Anwendung im Registerkartenformat mit Navigations-Elemente in die tab-Leiste, wie im Bild unten (Roter Balken) mittels Swift/XCode 6.2. Im Grunde sind diese drei Symbole in der Mitte sind direkte der Benutzer auf verschiedene view-Controller. Die beiden anderen icons wäre Kontext-basiert. Zum Beispiel auf eine Tabelle, Ansicht Seite sehen Sie das Hauptmenü-Symbol, und fügen Sie neue Symbol wie im Bild zu sehen. Allerdings, indem Sie auf eine Zeile ändern das Menü-Symbol, um ein zurück-Symbol, und das Symbol "hinzufügen", um etwas anderes.
Das ist die Allgemeine Idee, aber ich habe eine sehr harte Zeit der Umsetzung noch etwas in der Nähe dieser. Das erste Problem ist, dass wenn ich einbetten einer Ansicht in einem Tab Bar Controller, ich kann mich nicht bewegen die tab-Leiste an die Spitze. Allerdings, wenn ich erstellen Sie eine benutzerdefinierte UITabView in einer View-Controller, Control + Klicken und ziehen einer Tab Bar Item zu einer anderen Ansicht nicht erstellen Sie eine segue. Ich habe noch nicht einmal angefangen zu bewältigen, dass die Navigations-Elemente in der bar.
Ich denke, was ich verlange ist nur für eine kleine Anleitung auf was Weg zu nehmen, um diese Situation zu bewältigen. Ich nehme an, ich kann nicht mit einem Tab Bar Controller oder den Navigation-Controller ist, weil es scheint nicht, wie kann ich diese anpassen, dass alle viel. Also custom Tab Bar und Navigation-Bars, und dann implemnt das leitet über und Knopf programmgesteuert geändert?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich versuchen, Sie zu führen aus architektonischer Sicht (so werden Sie nicht finden viel code unten).
Mit einem UITabBarController
Um das zu erreichen, was Sie empfehlen, Sie sind Recht man nicht mit einem
UITabBarController
sofort, darunter mehrere Gründe, der offensichtlichste ist, dass Sie gemeint sind, zu immer an der Unterseite und Sie wollen, dass es in der obersten (check Apple docs). Die gute Nachricht ist, dass wahrscheinlich Sie brauchen es nicht!Hinweis: Wenn Sie immer noch wollen, zu gehen mit einem
UITabBarController
aus welchem Grund auch immer, bitte siehe @Matt ' s Antwort.Mit einem UINavigationController
Können Sie eine
UINavigationController
um diese Aufgabe zu lösen, da dieUINavigationBar
einerUINavigationController
angepasst werden kann. Es gibt mehrere Möglichkeiten, wie Sie organisieren Ihre Sicht der Hierarchie zu erreichen, was Sie vorschlagen, aber ich möchte eine option:Anpassen
UINavigationBar
's zum hinzufügen von Schaltflächen, die Sie gerade brauchen, um seinenavigationItem
's Titel anzeigen:Hinzufügen die burger Menü-Funktionen auf einer
UINavigationController
finden Sie mehrere Beiträge, wie Sie es tun und infinite frameworks Sie verwenden können. Überprüfen Sie diese anderen ALSO Frage für eine ausführlichere Antwort (z.B. MMDrawerController, ECSlidingViewController zu schweigen von ein paar).Über die Organisation Ihrer view-Hierarchie, es hängt wirklich davon ab, wenn der Benutzer tippt auf eines der wichtigsten top-buttons, es wird immer auf die erste view-controller in dem neuen Abschnitt, oder, wenn Sie wollen, bringe ihn zurück zur letzten Ansicht im Abschnitt, wo er war.
3.1 ein-Abschnitte zeigt der erste Blick auf den neuen Abschnitt
Ihrer app
UIWindow
wird eine einzelneUINavigationController
auf der Oberseite der Hierarchie. Dann jedes der 3 oberen Tasten beim Tippen, ändert sich der root-Ansicht-controller derUINavigationController
.Dann, wenn der Benutzer änderungen Abschnitt, der aktuellen Navigations-Hierarchie verworfen, indem die neue section-view-controller, wie die
UINavigationController
root-view-controller.3.2 Schalt-Abschnitte zeigt die zuletzt angezeigte Ansicht in den neuen Abschnitt
Dies erfordert eine leicht modifizierte version der oben genannten, wo Ihr jeder der Bereiche hat seine eigenen
UINavigationController
, so können Sie immer eine navigationshierarchie pro Abschnitt.Dann, wenn der Benutzer tippt auf einen der oberen buttons, Abschnitt, anstatt Sie zu verändern, wie zuvor beschrieben, ändern Sie die
UIWindow
root-view-controller auf den neuen AbschnittUINavigationController
.Mit einer benutzerdefinierten Implementierung
Natürlich die Letzte und auch sehr gültige option wäre, dass Sie realisieren Sie sich Ihre eigene Komponente, um Ihre Anforderungen. Dies ist wahrscheinlich die option, dass der größte Aufwand in exchange der höchste Anpassbarkeit.
Wahl dieser option ist definitiv nicht zu empfehlen, weniger erfahrene Entwickler.
titleView
in jedemUIViewController
. Ich kann nicht denken, ein anderer Weg, es zu tun, wenn es nicht über irgendeine Art von Darstellung des Setups, aber nicht sicher, wie das funktionieren würde. Trotzdem, es könnte sein, lohnt sich ein Blick auf die docs fürUINavigationController
Abschnitt die Aktualisierung der Navigation Bar könnte Ihnen einige Ideen.Möchte ich einen Stich an diese-ich denke, es ist möglich, einen tab bar controller hier.
UITabBarController
mit einer verstecktenUITabBar
.UINavigationController
.SwitchableViewController
).SwitchableViewController
'sviewDidLoad
legen Sie die Navigations-Element Titel-Ansicht (d.h. was auch immer in der Mitte;self.navigationItem.titleView
) zu der Ansicht, dass hält die drei center-Tasten. Könnte einUISegmentedControl
oder eine benutzerdefinierte Ansicht aus.UITabBarController
's ausgewählten index auf den view-controller, die Sie zeigen möchten.Probleme, die auftreten können:
scrollIndicatorOffset
unten, auch wenn der tab-Leiste ausgeblendet ist.automaticallyAdjustsScrollViewInsets
der tab-bar-controller, oder den inneren view-controller. https://stackoverflow.com/a/29264073/855680UITabBarController
einfach, effektiv ändern das Fenster das root-view-controller. Aber ich denke immer noch, es ist ein interessanter Ansatz und ich würde Sie gerne bitten, obwohl ich weiß, es würde bedeuten, nicht die Erhöhung Ihrer reputation, aber für die Vervollständigung, wenn Sie denken würden, dass die Bearbeitung meiner Antwort hinzufügen diese option.UITabBarController
ist das - Fenster den root-view-controller hier.UIWindow
sowieso, wenn Sie nicht über dieUITabBarController
, konnte nicht Sie?UITabBarController
Sie geben jedem Reiter seine unabhängige-navigation-stack. DietitleView
Tasten sind offensichtlich funktionieren als tabs, und es ist im iOS-design-Sprache, die für die navigation stack von jeder Registerkarte wird beibehalten, auch wenn Sie wechseln Sie. Ihr Ansatz verwirft die aktuelle navigation stack jedes mal, wenn eine Auswahl getroffen wird. Ist es das, was @itstrueimryan will? Ich weiß es nicht. Wir beide sahen nicht, die vollständigen Spezifikationen seiner app. Ich bin nur ihm, eine weitere option.UITabBarController
Abschnitt, wenn das in Ordnung ist mit Ihnen.