Passer des données entre les contrôleurs affichés par tabulation dans swift?
Ce qu'il fait
- Lorsque la première page dans ma barre d'onglet contrôleur de charge, j'ai récupérer des données à partir d'un fichier json
- - Je stocker dans un tableau (dans la première vue contrôleur)
- Les données obtenues seront affichés dans la deuxième vue-contrôleur. Les données sont déjà chargées et stockées dans un tableau dans le premier-vue-contrôleur.
Problème:
Je ne peux pas trouver un moyen pour transmettre les données entre les deux contrôleurs. Ne peut pas transmettre les données basées sur la séquence identifiant puisque c'est une barre d'onglet contrôleur
S'il vous plaît aider!
source d'informationauteur 0to1000
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de transmettre les données entre les contrôleurs de vue alors :
H. Serdar code de l'exemple est de droite, c'est le moyen d'accéder à un autre onglet de la vue de contrôleur et de lui donner des données.
Garder à l'esprit que lorsque vous passez un tableau dans Swift, vous êtes le passage par valeurcontrairement à Objective-C, qui passe par référence. Cela signifie que les modifications apportées par votre seconde vue-contrôleur ne seront pas reflétées dans votre premier point de vue contrôleur, parce que votre deuxième est l'utilisation d'une copie du tableau, pas de la même matrice. Si vous souhaitez afficher les contrôleurs de modifier le même tableau, mettre le tableau dans une classe, et de passer une seule instance de cette classe autour de.
De quelques autres considérations:
Vous pourriez sous-classe de la TabBarController de lui donner une propriété qui va stocker vos données, et qui serait disponible pour tous les onglets à l'aide de:
Dans cette situation, vous auriez accès à la même matrice à partir de plusieurs onglets, les modifications apportées à un onglet seraient reflétées par ailleurs.
Je recommande à l'encontre de l'approche de l'utilisation de l'Application Délégué dans un endroit centralisé pour stocker des données. Ce n'est pas le but de l'application du délégué. Son but est de gérer le délégué des appels pour l'objet application.
Afficher les Contrôleurs doivent avoir toutes les données, encapsulée à l'intérieur d'eux, dont ils ont besoin pour faire leur travail. Ils disposent d'une connexion à leur modèle de données (tels que votre tableau, ou une référence à une base de données ou de gestion de contexte de l'objet) plutôt que d'avoir une vue contrôleur de toucher un autre objet en traversant une-vue-contrôleur graphique ou dans l'délégué ou même en utilisant une variable globale. Cette modulaires et autonomes, de la construction de la Vue des Contrôleurs permet de restructurer votre application semblables, mais des designs uniques sur les différents périphériques, tels que la présentation d'une vue contrôleur dans une liste sur un appareil (comme un iPad) et la présentation en plein écran sur l'autre, comme un iPhone.
J'ai fini par utiliser un singleton comme Woodster indiqué dans sa réponse ci-dessus.
Dans Swift 3
Créer une nouvelle swift fichier et créer une classe:
Dans l'un de vos contrôleurs de vue, vous pouvez accéder à votre tableau comme ceci:
SWIFT 3
Dans votre premier viewcontroller, déclarer votre variable (dans votre cas, un tableau) comme vous le feriez normalement.
Dans votre deuxième viewcontroller, faites ceci:
Cela fonctionne parce que, dans un tabbarcontroller tous viewcontrollers derrière l'onglet éléments sont initialisés. En faisant cela, dans votre deuxième viewcontroller vous sont effectivement obtenir/définition de la variable à partir de/dans la première viewcontroller.
J'ai un contrôleur d'affichage des onglets dans mon application et j'ai utiliser le même tableau pour les onglets multiples points de vue. - Je y arriver par la déclaration du tableau en dehors de toutes les classes (dans les lignes entre l'importation UIKit et la déclaration de la classe), de sorte qu'elle est essentiellement une variable globale que chaque point de vue peut accéder. Avez-vous essayé?