Accéder à l'instance d'un Viewcontroller de l'autre swift
Je suis en train de transférer des données à partir de la zone de texte d'un point de Vue Contrôleur de l'étiquette à partir d'un autre.
Comment puis-je appeler la Vue instance du Contrôleur du code de l'autre-Vue-Contrôleur? Je travaille avec les storyboards donc je n'ai jamais créé une instance de la Vue des Contrôleurs dans le code? Sont les instances créées automatiquement? Et ce nom ont-ils?
Merci pour votre aide!
- dans Un ViewController, vous créez ViewController B. vous avez Maintenant accès à ViewController B, il suffit donc de définir une propriété ou d'envoyer un message à ViewController B. Maintenant, vous pouvez pousser ViewController B sur la manette de navigation.
- double possible de le Passage des données entre les Contrôleurs de Vue à l'aide de Segue
Vous devez vous connecter pour publier un commentaire.
1. Si le point de vue du contrôleur contenant le textfield peut appeler (avec un segue) le point de vue du contrôleur contenant l'étiquette...
Ajouter un nouveau Cocoa Touch fichier de classe dans votre projet, le nom
FirstViewController
et de définir le code suivant dedans:Ajouter un nouveau Cocoa Touch fichier de classe dans votre projet, le nom
SecondViewController
et de définir le code suivant dedans:Dans le Storyboard, les incorporer à la première vue-contrôleur dans un
UINavigationController
. Lien de la première-vue-contrôleur à la seconde avec unUIButton
ou unUIBarButtonItem
. Définir le nom de la première-vue-contrôleur deFirstViewController
et le nom de la seconde vue-contrôleur deSecondViewController
. Créer unUITextField
dans la première vue-contrôleur. Créer unUILabel
dans le second contrôleur. Lien le champ de texte et de l'étiquette de leurs déclarations respectives dansFirstViewController
etSecondViewController
.2. Si le point de vue du contrôleur contenant l'étiquette peut appeler (avec un segue) le point de vue du contrôleur contenant le textfield...
Ici, c'est un parfait protocole/délégué cas. Vous pouvez trouver beaucoup de choses sur StackOverflow traiter cette question. Cependant, voici un exemple grossier.
Ajouter un nouveau Cocoa Touch fichier de classe dans votre projet, le nom
FirstViewController
et de définir le code suivant dedans:Ajouter une nouvelle Cacao/Cacao Touch fichier de classe dans votre projet, le nom
SecondViewController
et de définir le code suivant dedans:Dans le Storyboard, les incorporer à la première vue-contrôleur dans un
UINavigationController
. Lien de la première-vue-contrôleur à la seconde avec unUIButton
ou unUIBarButtonItem
. Définir le nom de la première-vue-contrôleur deFirstViewController
et le nom de la seconde vue-contrôleur deSecondViewController
. Créer unUILabel
dans la première vue-contrôleur. Créer unUITextField
dans le second contrôleur. Lien le champ de texte et de l'étiquette de leurs déclarations respectives dansFirstViewController
etSecondViewController
.Imanou Petit et Oscar Swanros déjà répondu correctement. Cependant il existe une alternative qui est plutôt "hacky" que j'ai eu à l'utiliser pour transférer des données entre 2 vue contrôleurs sans enchaîner les reliant.
Pour obtenir la vue racine contrôleur de votre application, vous pouvez:
À partir de là, vous pouvez obtenir une vue contrôleur que vous souhaitez. Par exemple, si vous souhaitez que le deuxième enfant-vue-contrôleur de la vue racine contrôleur alors vous feriez:
Gardez à l'esprit que cette approche est plutôt "hacky" et viole probablement les meilleures pratiques de codage.
Vous avez besoin pour créer une Transition entre les Contrôleurs de Vue:
ViewController A
.Control
, cliquez surViewController A
, faites glisser la ligne bleue pourViewController B
. SiViewController A
est incorporé dans unNavigationController
, sélectionnez "afficher" dans le menu qui apparaît lorsque vous laissez aller. Sinon, sélectionnez "présent modal."Maintenant, lorsque vous souhaitez déclencher la séquence sur
ViewController A
, il vous suffit d'appeler (peut-être sur le robinet d'un bouton):Pour passer d'une valeur à
ViewController B
, remplacer laprepareForSegue:sender
méthode surViewController A
:Assez simple.
Noter que pour que cela fonctionne, votre
ViewController B
classe devrait ressembler à quelque chose comme ceci:Espère que cette aide.