Die Weitergabe der Daten von der view-controller-tab-bar-controller in iOS
Ich bin der Entwicklung einer iOS-app und jetzt bin ich ratlos. Ich versuche, die übergabe von Daten aus der ersten View-Controller auf die erste Registerkarte eines TabBarViewController (mit storyboard). Ich fand eine Menge von tutorials, die erklären, wie die übergabe von Daten zwischen view-Controller, aber nichts funktionierte mit meiner tab-Leiste. Ich weiß, dass die tab-bar-controller enthält eine Art von array von Ansichten. Die Beziehung zwischen der View-Controller und die Tab-Bar-Controller erfolgt über ein segue (push). So, ich dachte, es ist einfach zu bedienen, die prepareForSegue() - Methode. So:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"tab"]) {
//...
}
}
Leider, die Beziehung zwischen dem Tab Bar Controller und jede tab-bar anzeigen, ist kein wirklicher Wechsel. Es ist nur eine "Beziehung". Das bedeutet, es gibt keine segue id ich bin in der Lage zu verwenden, für die die Methode, die oben genannten. Gibt es eine Möglichkeit der Verwendung von prepareForSegue in diesem Fall? Wenn nicht, irgendwelche Ideen, wie dieses problem zu lösen? Ich weiß, dass es eine ähnliche Frage, aber die Antwort war nicht so hilfreich. Muss ich eine neue Datei erstellt für jeden tab (Ansicht), die im tab bar controller? Oder ist es möglich, eine Klasse (m. & h.) für die ganze tab-bar-controller, der Zugriff auf die verschiedenen anzeigen mit objectAtIndex()?
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist mein setup, das hat geklappt:
tab
)ViewController
TabBarController
TabsViewController
(gemeinsam von beiden)Setup
labelString
Eigenschaft in der Tab Bar Controller:In
TabBarController.h
:In
TabBarController.m
:Setup
prepareForSegue
Methode inViewController.m
:Setup
UILabel
s für Kinder-Tab-Bar-View-Controller.UILabel
Steuerelemente in beiden untergeordneten View-ControllerErstellen-Eigenschaft in
TabsViewController.h
:Haken
5.1
und5.2
bis in die Storyboard -Setup
ViewDidLoad
Methode inTabsViewController.m
:Klickt man nun auf die 1. und 2. Registerkarten werden die Beschriftungen
Tab 0: This has been set
undTab 1: This has been set
bzw.TabsViewController
, und inprepareForSegue
würden Sie gerade haben, um eine Schleife durch alle der Tab-Leiste, die Child-View-Controller und jeweils 1, es ist nur so, dass @Keks hatte eineTabBarController
schon eingerichtet.Wenn Ihre Hierarchie ist Viewcontroller->UItabbarcontroller->ViewCOntroller
in meinem Fall habe ich das senden von Daten an marketviewcontroller . In tabcontroller, marketviewcontroller vorhanden ist bei index 0.
Wie sind Sie zeigen Ihre TabBarViewController von Ihrer UIViewController?
Ich vermute, mit einem segue. Wenn dies ist, wie Sie es tun, können Sie die übertragung von Daten von dieser UITabBarController, die die "Eltern" - für alle Domänencontroller innerhalb der Registerkarten.
Sagen, Sie möchten, übergeben Sie eine Zeichenfolge an den UITabBarController, würden Sie eine Eigenschaft definieren, die in diesem controller, und legen Sie es, bevor die segue.
Dann, mit der delegate-Methode haben Sie die ausgewählte view-controller, so können Sie geben Sie die parent-Eigenschaft an die Kinder:
Haben Sie einen Blick auf singletons. Innerhalb einer Registerkarte, die Sie erstellen eine Instanz einer Hilfsklasse implementiert das singleton-template, so dass es eigentlich nur eine einzige Instanz. Das heißt, wenn der zweite tab instanziiert die gleichen Helfer Klasse haben Zugriff auf das gleiche Objekt, das Sie verwenden, um Ihre Daten ...
z.B.: http://www.galloway.me.uk/tutorials/singleton-classes/
Erste:
1 - Sie wollen, übergeben Sie die Daten auf Ihrem tab aus irgendeinem Grund...
oder:
2 - Sie möchten, übergeben Sie die Daten auf Ihrem tab so dass Sie dann weitergeben können, um anderen
UIViewController
?Wenn es die zweite option, die häufigste Muster für diese ist das Singleton. Wo können Sie halten die gemeinsamen Daten, die verwendet werden kann/verwendet von verschiedenen teilen der Anwendung.
Der einfachste Weg ist das erstellen einer benutzerdefinierten Klasse und setzen Sie den Wert aus dem controller, um custom class und dann den Wert von benutzerdefinierten Klasse auf dem controller.
Beispiel-code ist hier:
Ersten erstellen von benutzerdefinierten Klasse zum Beispiel
AppUtility.h
AppUtility.m
FirstController.m
importieren Sie benutzerdefinierte Klasse in den controller
setzen Sie den Wert aus der ersten controller, um custom-Klasse, verwenden Sie den folgenden code, um den Wert festzulegen:
Zweiten controller.m
importieren Sie benutzerdefinierte Klasse in den controller
hier um den Wert der benutzerdefinierten Klasse, verwenden Sie den folgenden code, um den Wert:
In appUtility Klasse nslog-Anweisungen stellen Sie sicher die Werte richtig sind oder nicht