Je suis un débutant et j'ai un projet dans lequel j'ai besoin de transmettre des données à un contrôleur enfant. Plus précisément, j'ai une vue sélecteur dans mon conteneur et je veux être capable de l'utiliser pour sélectionner une option (par exemple, pour simplifier juste une couleur à choisir parmi un tableau de dix couleurs). Ensuite, j'aimerais pouvoir accéder à la couleur choisie dans mon contrôleur de vue parent et faire quelque chose avec. J'ai fait des recherches pendant quelques jours maintenant et la réponse la plus proche à ce que je cherche, j'ai trouvé dans une question connexe sur S.O. Ici, il est:.Transmettre des données à partir du contrôleur de vue enfant
« En ce qui concerne la valeur de passage au contrôleur containerView, vous pouvez faire une propriété dans la ChildViewController de la valeur que vous voulez qu'il soit passé ensuite dans votre ParentViewController faire quelque chose comme ce qui suit:
self.ChildViewController.yourProperty = yourValue
le contraire peut se faire de 4 façons:
Vous pouvez faire un protocole de délégué pour communiquer les données entre vos contrôleurs
Vous pouvez poster une notification dans votre ChildViewController et ajoutez le par. contrôleur en tant qu'observateur.
Vous pouvez utiliser KVO.
Et la façon la plus simple, vous pouvez faire une propriété dans votre parentviewController et accéder comme suit: »
((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
Maintenant, je voudrais essayer la quatrième option d'abord comme la délégation, KVO etc. Ce que j'aurais besoin d'aide est la dernière option:
Dites que j'ai une propriété dans mon contrôleur de vue enfant où je stocke la couleur choisie:
@interface ViewController()
@property NSString *ChosenColorInChildVC;
@end
Et puis, plus tard:
self.ChosenColorInChildVC = [self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];
comment pourrais-je transmettre cette valeur à l'aide du projet:
((YourParentViewControllerClassType *)self.parentViewController).yourParentProperty = TheValueYouWant;
Quelqu'un peut-il muet il un peu plus loin pour moi? Merci
Salut METRONIC. Merci pour cela, ça m'a beaucoup aidé. J'ai fait tout ce que vous avez dit et (je pense) compris la logique derrière tout cela. Sauf pour le dernier bit que vous avez écrit: "Sur votre ParentViewController.m: - (void) passValue: (UIColor *) theValue {// ici vous recevez la couleur transmise par ChildViewController}" Je comprends plus ou moins l'idée derrière, mais comment cela fonctionne-t-il réellement dans la pratique? Dis que j'ai choisi le rouge dans mon récipient. comment pourrais-je y accéder chez mes parents en utilisant cette méthode? quelque chose comme: UIColor * myReceivedColor = [selfpassValue: ???]; – Paul
Non, vous recevrez les données dans la méthode - (void) passValue: (UIColor *) theValue; Mettez un point d'arrêt dans cette méthode pour être sûr que cela fonctionne, vous pouvez y accéder comme ceci: UIColor * myReceivedColor = theValue; – metronic
OK. Désolé pour ça. Je ne connais pas du tout le concept de «réception de valeurs» à l'intérieur d'une méthode. Donc, pour être sûr que je te comprends. Dois-je écrire quoi que ce soit à l'intérieur de la méthode - (void) passValue: (UIColor *) theValue {} dans mon Parent? Et si je veux accéder à la couleur de mes parents ... j'ai essayé d'écrire littéralement UIColor * myReceivedColor = theValue; et il revient avec "utilisé de l'identificateur non déclaré:" theValue ".J'ai aussi essayé UIColor * myReceivedValue = [selfpassValue: theValue]; – Paul