Vous utilisez un modèle de délégué pour la vue modale pour informer celui qui l'a présenté quand il est terminé.
MyModalViewController.h:
@protocol MyModalViewControllerDelegate;
@interface MyModalViewController : UIViewController
{
id<MyModalViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id<MyModalViewControllerDelegate> delegate;
@end
@protocol MyModalViewControllerDelegate
- (void)myModalViewControllerFinished:(MyModalViewController*)myModalViewController;
@end
MyModalViewController.m:
@synthesize delegate;
// Call this method when the modal view is finished
- (void)dismissSelf
{
[delegate myModalViewControllerFinished:self];
}
ParentViewController.h:
#import "MyModalViewController.h"
@interface ParentViewController : UIViewController <MyModalViewControllerDelegate>
{
}
ParentViewController.m:
- (void)presentMyModalViewController
{
MyModalViewController* myModalViewController = [[MyModalViewController alloc] initWithNibName:@"MyModalView" bundle:nil];
myModalViewController.delegate = self;
[self presentModalViewController:myModalViewController animated:YES];
[myModalViewController release];
}
- (void)myModalViewControllerFinished:(MyModalViewController*)myModalViewController
{
[self dismissModalViewControllerAnimated:YES];
}
EDIT:
Je ne l'ai pas utilisé UIImagePickerController
, mais en regardant les documents, il semble que vous avez déjà la plupart du code fait pour vous, car il y a une classe UIImagePickerControllerDelegate
existante qui a trois différents " "renvoyer" les rappels de délégué (bien que l'un soit obsolète). Donc, vous devriez créer votre classe ParentViewController
(quelle qu'elle soit) implémenter le modèle UIImagePickerControllerDelegate
, puis implémenter ces méthodes. Bien que chaque méthode fasse quelque chose de différent (puisque vous devez gérer quand l'utilisateur sélectionne réellement une image, ou si elle annule), chacun fera la même chose à la fin: appelez dismissModalViewControllerAnimated:
pour fermer le sélecteur.
Voir ma réponse pour la mise à jour. –