Photo Vue bibliothèque reste à l'écran après avoir choisi une image avec UIImagePickerController
-
21-08-2019 - |
Question
Après avoir choisi une image à travers l'interface UIImagePickerController de la bibliothèque de photos, la vue Photothèque reste affiché, même si je l'ai appelé dismissModelViewControllerAnimated imagePickerController: didFinishPickingImage: editingInfo .
Quelqu'un at-il vu? Ce sont les trois méthodes pertinentes que je utilise:
- (IBAction)choosePictureFromLibrary:(id)sender {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsImageEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:picker animated:YES];
[picker release];
}
else {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error accessing Photo Library" message:@"This device does not support a Photo Library." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)image editingInfo:(NSDictionary*)editingInfo {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Picture picked!" message:@"You picked a picture!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
[picker dismissModalViewControllerAnimated:YES];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker {
[picker dismissModalViewControllerAnimated:YES];
}
J'aurais pensé que l'appel imagePickerController: didFinishPickingImage: editingInfo serait complètement rejeter la vue bibliothèque de photos, mais il ne semble pas. Y at-il autre chose que je dois faire pour faire disparaître?
La solution
Vous devez accéder au viewController du sélecteur pas le sélecteur lui-même. Essayez cette ligne à la place.
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
Autres conseils
Vous pouvez simplement appeler
[self dismissModalViewControllerAnimated:YES];
pour rejeter un contrôleur de vue modal au-dessus de la vue courante.
Cela est logique puisque vous présenter le contrôleur de vue en appelant:
[self presentModalViewController:picker animated:YES];
Juste une mise à jour des réponses à cette
[self dismissModalViewControllerAnimated:YES];
a été dépréciée en sorte que vous devez iOS 6.0
maintenant utiliser.
[self dismissViewControllerAnimated:YES completion:nil];
Pas un énorme changement, mais pour tous ceux qui se penche sur cette question et ils utilisent iOS 6.0, ils auront besoin d'une réponse mise à jour.
[self presentModalViewController:filePicker animated:YES];
a également été dépréciée en faveur de
[self presentViewController:filePicker animated:YES completion:nil];