Vous avez besoin d'utiliser délégué de protocoles... Voici comment faire:
Déclarer un protocole dans votre secondViewController du fichier d'en-tête. Il devrait ressembler à ceci:
#import <UIKit/UIKit.h>
@protocol SecondDelegate <NSObject>
-(void) secondViewControllerDismissed:(NSString *)stringForFirst
@end
@interface SecondViewController : UIViewController
{
id myDelegate;
}
@property (nonatomic, assign) id<SecondDelegate> myDelegate;
N'oubliez pas de faire la synthèse de la myDelegate dans votre .m fichier:
@synthesize myDelegate;
Dans votre firstViewController du fichier d'en-tête abonnez-vous à la SecondDelegate protocole en faisant ceci:
#import "SecondViewController.h"
@interface FirstViewController:UIViewController <SecondDelegate>
Maintenant, lorsque vous instanciez secondViewController dans firstViewController vous devez effectuer les opérations suivantes:
SecondViewController *second = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
second.myString = @"This text is passed from firstViewController!";
second.myDelegate = self;
second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:second animated:YES];
[second release];
Enfin, dans le .m de fichier pour votre premier point de vue contrôleur de mettre en œuvre les SecondDelegate méthode de secondViewControllerDismissed:
- (void)secondViewControllerDismissed:(NSString *)stringForFirst
{
NSString *thisIsTheDesiredString = stringForFirst; //And there you have it.....
}
Maintenant, quand vous êtes sur le point de rejeter le second point de vue contrôleur que vous souhaitez invoquer la méthode mise en œuvre dans la première vue-contrôleur. Cette partie est simple. Tout ce que vous faites est, dans votre seconde vue-contrôleur, ajouter un peu de code avant de le rejeter code:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!"];
}
[self dismissModalViewControllerAnimated:YES];
Délégué protocoles sont EXTRÊMEMENT, extrêmement, EXTRÊMEMENT utile. Cela vous ferait du bien de vous familiariser avec eux :)
NSNotifications sont une autre façon de le faire, mais comme une meilleure pratique, je préfère l'utiliser quand je veux communiquer à travers de multiples viewControllers ou des objets. Voici une réponse que j'ai posté plus tôt si vous êtes curieux à propos de l'utilisation NSNotifications: de déclencher des événements dans plusieurs viewcontrollers à partir d'un thread dans le appdelegate
EDIT:
Si vous souhaitez passer plusieurs arguments, le code avant de licencier ressemble à ceci:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:argument2:argument3:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!" argument2:someObject argument3:anotherObject];
}
[self dismissModalViewControllerAnimated:YES];
Cela signifie que votre SecondDelegate méthode de la mise en œuvre à l'intérieur de votre firstViewController va ressembler à ça:
- (void) secondViewControllerDismissed:(NSString*)stringForFirst argument2:(NSObject*)inObject1 argument3:(NSObject*)inObject2
{
NSString thisIsTheDesiredString = stringForFirst;
NSObject desiredObject1 = inObject1;
//....and so on
}