0

c'est une question concernant la délégation, en essayant de transmettre des données à partir d'un contrôleur de vue de l'enfant qui est lié à une vue du conteneur qui a une vue de sélecteur. J'ai posé une question connexe avant et quelqu'un a eu la gentillesse de répondre avec le code suivant: «Je vais vous expliquer avec un exemple comment fonctionne délégationdélégation et childVIewController

Modifier vos ChildViewController.h comme ceci: »

@protocol ChildViewControllerDelegate; 

@interface ChildViewController : UIViewController 

@property (weak)id <ChildViewControllerDelegate> delegate; 

@end 

@protocol ChildViewControllerDelegate <NSObject > 

- (void) passValue:(UIColor *) theValue; 

@end 

"Sur votre ChildViewController.m quand vous voulez passer quelque chose à la ParentViewController, faire comme ceci:"

- (void) myMethod 
{ 
    [delegate passValue:[UIColor redColor]]; // you pass the value here 
} 

Sur votre Par entViewController.h

#import "ChildViewController.h" 

@interface ParentViewController : UIViewController <ChildViewControllerDelegate > // you adopt the protocol 
{ 
} 

Sur votre ParentViewController.m:

- (void) passValue:(UIColor *) theValue 
    { 
     //here you receive the color passed from ChildViewController 
    } 

maintenant être prudent. Tout ne fonctionnera que si vous définissez le délégué. Ainsi, lorsque vous déclarez ChildViewController dans votre classe ParentViewController, faites comme ceci:

ChildViewController * controller = [[ChildViewController alloc]initWithiNibName:@"ChildViewController"]; 

controller.delegate = self; //without this line the code won't work!" 

Quoi qu'il en soit, cela m'a aidé tout à fait un peu et est l'un des conseils les plus utiles que j'ai encore. Malheureusement, l'une des lignes de ce code renvoie une erreur et rend le délégué nul. Il est celui-ci:

ChildViewController * controller = [[ChildViewController alloc]initWithiNibName:@"ChildViewController"]; 

l'erreur est: « Non @interface visible « ChildViewController » déclare le sélecteur « initWithNibName: »

Comme je suivais les instructions sur quelque chose que je suis en train d'apprendre, je . suis un peu perdu pour commencer, lorsque je tente de le taper, la méthode proposée prend un autre argument: [[ChildViewController alloc] initWithNibName: < # (annulable NSString *) #> bundle: < # (annulable NSBundle *) #> ];

je l'ai fait un NSLog pour obtenir le quelqu'un peut-il [Description self.delegate] et il est revenu nul aider.? grâce

Répondre

0

Il semble que votre conseil de délégation est bonne, mais qu'il avait laissé un paramètre pour la construction du contrôleur de vue par l'intermédiaire d'un story-board.

ChildViewController *controller = [[ChildViewController alloc] 
     initWithNibName:@"ChildViewController" 
       bundle:[NSBundle mainBundle]]; 

... fonctionnera, mais seulement s'il y a un fichier constructeur d'interface dans le projet appelé « ChildViewController ».

+0

Merci, j'ai pensé à cela toute la journée. J'ai essayé ce que tu suggères, toujours pas d'amour. J'ai déjà fait un projet plus simple, si vous n'avez certainement pas quelque chose de plus intéressant à faire, j'apprécierais si vous aviez un coup d'oeil rapide. Je comprendrai la délégation si c'est la dernière chose que je fais! http://stackoverflow.com/questions/34983566/delegation-and-passing-data-back-from-childviewcontroller – Paul