Übergeben von Daten vom View-Controller an den Tab-Controller in iOS

8

Ich entwickle eine iOS App und jetzt bin ich ratlos. Ich versuche Daten vom ersten View Controller an die erste Registerkarte eines TabBarViewControllers zu übergeben (mit dem Storyboard). Ich habe eine Menge Tutorials gefunden, in denen erklärt wird, wie Daten zwischen View-Controllern übertragen werden, aber in meiner Tab-Leiste funktioniert nichts. Ich weiß, dass der Tab-Bar-Controller eine Art Array von Ansichten enthält. Die Beziehung zwischen dem View-Controller und dem Tab-Bar-Controller wird über einen Schiebeschalter (Push) realisiert. Also dachte ich, es ist einfach, die prepareForSegue () - Methode zu verwenden. So:

%Vor%

Leider ist die Beziehung zwischen dem Tab-Bar-Controller und jeder Tab-Leiste-Ansicht kein echter Übergang. Es ist nur eine "Beziehung". Das heißt, es gibt keine Überleitungskennung, die ich für die oben genannte Methode verwenden kann. Gibt es eine Möglichkeit, in diesem Fall prepareForSegue zu verwenden? Wenn nicht, irgendwelche Ideen, wie man dieses Problem löst? Ich weiß, dass es eine ähnliche Frage gibt, aber die Antwort war nicht so hilfreich. Muss ich für jede Registerkarte (Ansicht) innerhalb des Tab-Controllers eine neue Datei erstellen? Oder ist es möglich, eine Klasse (m. & Amp; h.) Für den gesamten Registerkarten-Controller zu haben, die mit objectAtIndex () auf die verschiedenen Ansichten zugreift?

Vielen Dank im Voraus!

    
Keks 19.07.2013, 09:51
quelle

6 Antworten

8

Hier ist mein Setup, das funktioniert hat:

  1. Setup-Abschnitt:
    1. Setup View Controller mit Überleitung zum Tab Bar Controller mit 2 untergeordneten View Controllern im Storyboard
    2. Geben Sie die Segmentkennung ( tab )
    3. an
  2. Setup-Klassen im Storyboard:
    1. View Controller-Klasse = ViewController
    2. Tableiste Steuerungsklasse = TabBarController
    3. Registerkarten-Controller untergeordnete Ansicht Controller-Klasse = TabsViewController (gemeinsam für beide)
  3. Setup labelString -Eigenschaft in Tab-Leiste-Controller:

    1. In TabBarController.h :

      %Vor%
    2. In TabBarController.m :

      %Vor%
  4. Setup prepareForSegue Methode in ViewController.m :

    %Vor%
  5. Setup UILabel s für Child-Registerkarten-View-Controller.

    1. Ziehen Sie die Standardsteuerelemente UILabel in beide untergeordneten View-Controller
    2. Erstellen Sie eine Eigenschaft in TabsViewController.h :

      %Vor%
    3. Hook 5.1 und 5.2 up im Storyboard

  6. Setup ViewDidLoad Methode in TabsViewController.m :

    %Vor%

Wenn Sie jetzt auf die erste und zweite Registerkarte klicken, werden die Bezeichnungen Tab 0: This has been set bzw. Tab 1: This has been set angezeigt.

    
Yazid 19.07.2013, 12:53
quelle
8

Wenn Ihre Hierarchie Viewcontroller- & gt; UItabbarcontroller- & ViewView-Controller

ist

In meinem Fall muss ich Daten an marketviewcontroller senden. Im tabcontroller ist marketviewcontroller auf Index 0 vorhanden.

%Vor%     
Kalpesh 19.07.2013 09:57
quelle
1

Wie zeigen Sie Ihren TabBarViewController von Ihrem UIViewController?

Ich rate mit einem Übergang. Wenn Sie so vorgehen, können Sie Daten an diesen UITabBarController übergeben, der für alle Controller innerhalb der Registerkarten "übergeordnet" ist.

Wenn Sie beispielsweise eine Zeichenfolge an den UITabBarController übergeben möchten, definieren Sie eine Eigenschaft in diesem Controller und legen diese vor dem Segment fest.

%Vor%

Dann haben Sie mit der Delegate-Methode den ausgewählten View-Controller, sodass Sie die Parent-Eigenschaft an die untergeordneten Elemente übergeben können:

%Vor%     
ade 19.07.2013 10:29
quelle
1

Sieh dir Singletons an. Innerhalb einer Registerkarte erstellen Sie eine Instanz einer Hilfsklasse, die die Singleton-Vorlage implementiert, um sicherzustellen, dass es tatsächlich nur eine einzige Instanz gibt. Das heißt, wenn die zweite Registerkarte dieselbe Hilfsklasse instanziiert, hat sie Zugriff auf dasselbe Objekt, mit dem Sie Ihre Daten teilen können ...

z. B. Ссылка

    
Martin Mandl 19.07.2013 10:46
quelle
0

Als erstes:

1- Sie möchten die Daten aus irgendeinem Grund an Ihre Registerkarte weitergeben ...

oder:

2- Sie möchten die Daten an Ihren Tab übergeben, dann können Sie zu einem anderen UIViewController gehen?

Wenn es die zweite Option ist, ist das Singleton das gebräuchlichste Muster dafür. Wo Sie allgemeine Daten aufbewahren können, die von verschiedenen Teilen der Anwendung verwendet / wiederverwendet werden können.

    
Peres 19.07.2013 09:53
quelle
0

Der einfachste Weg besteht darin, eine benutzerdefinierte Klasse zu erstellen und den Wert vom Controller zur benutzerdefinierten Klasse zu setzen und dann den Wert von der benutzerdefinierten Klasse zum Controller zu übernehmen.

Beispielcode ist hier:

Erstellen Sie zuerst eine benutzerdefinierte Klasse zum Beispiel

AppUtility.h

%Vor%

AppUtility.m

%Vor%

FirstController.m

Importieren Sie die benutzerdefinierte Klasse in den Controller

%Vor%

Legen Sie den Wert vom ersten Controller zur benutzerdefinierten Klasse fest. Verwenden Sie den folgenden Code, um den Wert festzulegen:

%Vor%

Zweiter Controller.m

Importieren Sie die benutzerdefinierte Klasse in den Controller

%Vor%

Hier erhalten Sie den Wert aus der benutzerdefinierten Klasse, verwenden Sie den folgenden Code, um den Wert zu erhalten:

%Vor%

In AppUtility-Klasse Verwenden Sie nslog-Anweisungen, um zu überprüfen, ob die Werte korrekt sind oder nicht

    
user2998756 19.11.2013 06:30
quelle