Transmettre des données entre ViewController et ContainerViewController
Je suis en train de travailler sur une application, et de la nécessité de transmettre les données entre la vue et containerView. J'ai besoin d'envoyer des données et de recevoir des données à partir de deux points de Vue.
Laissez-moi vous expliquer mieux:
Je peux changer le Label Maître (Toucher le Conteneur Bouton) par protocolemais je ne peux pas changer le Étiquette de Conteneur (Touchez le bouton Master). Ce qui se passe est le Maître se connecte avec le récipient par la suite. Mais n'ont pas de suivre Conteneur de liaison pour le Maître.
J'ai essayé de l'ajouter, mais des enchaînements, mais cela a fonctionné.
Le Maître-Vue-Contrôleur:
import UIKit
protocol MasterToContainer {
func changeLabel(text:String)
}
class Master: UIViewController, ContainerToMaster {
@IBOutlet var containerView: UIView!
var masterToContainer:MasterToContainer?
@IBOutlet var labelMaster: UILabel!
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "containerViewSegue" {
let view = segue.destinationViewController as? Container
view!.containerToMaster = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button_Container(sender: AnyObject) {
masterToContainer?.changeLabel("Nice! It's work!")
}
func changeLabel(text: String) {
labelMaster.text = text
}
}
Le Conteneur View Controller:
import UIKit
protocol ContainerToMaster {
func changeLabel(text:String)
}
class Container: UIViewController, MasterToContainer {
var containerToMaster:ContainerToMaster?
@IBOutlet var labelContainer: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func button_Master(sender: AnyObject) {
containerToMaster?.changeLabel("Amazing! It's work!")
}
func changeLabel(text: String) {
labelContainer.text = text
}
}
Quelqu'un peut m'aider?
source d'informationauteur James
Vous devez vous connecter pour publier un commentaire.
Tout ce que vous devez faire est de garder une référence à
Container
dans votre master-vue-contrôleur.Qui est, vous devez ajouter une variable d'instance de
Master
qui contiendra une référence à la - vue-contrôleuret pas seulement la vue. Vous aurez besoin de le mettre dansprepareForSegue
.Donc le début de Maître-Vue-Contrôleur ressemblerait à quelque chose comme ceci:
Et puis dans votre fonction de bouton, il suffit de changer l'étiquette à l'aide de la variable que vous venez d'ajouter.
Exemple:
Cela signifie que vous pouvez vous débarrasser de votre
MasterToContainer
protocole de trop.J'ai testé ce code, donc je sais que ça fonctionne, mais malheureusement, je suis Objective-C dev, et ne sais rien à propos de les meilleures pratiques en Swift. Donc je ne sais pas si c'est la meilleure façon d'aller à ce sujet, mais il fonctionne.
Edit:
Voila exactement le code que j'ai testé:
Maître.swift:
Conteneur.swift:
Je l'ai résolu avec ce code
Pour envoyer des données à partir de ViewController -> ContainerViewController
dans votre ContainerViewController
Pour envoyer des données à partir de ContainerViewController -> ViewController
et dans ViewController
J'espère que cela aidera quelqu'un.