Уволить UIImagePickerController


Я перепробовал все варианты увольнения UIImagePickerController без какой-либо удачи. Что я делаю не так?

- (IBAction)choosePhoto
{
    self.picker = [[UIImagePickerController alloc] init];
    self.picker.delegate = self;
    self.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:self.picker animated:YES];

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePicker
{
    NSLog(@"dismiss image picker");
    [self dismissModalViewControllerAnimated:NO];
    [[self.picker parentViewController] dismissModalViewControllerAnimated:NO];
    [self.presentedViewController dismissModalViewControllerAnimated:NO];
    [self.presentingViewController dismissModalViewControllerAnimated:NO];
     // And every other way i could think of
}

- (void)imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    .. same stuff here
}

Я попытался представить выбор от родителя, дедушки, navigationController и корневого контроллера, и ничего не работает. Что бы я ни делал, я не могу отмахнуться от ImagePickerController.

Обратите внимание, что оператор log вызывается каждый раз.

Ура

4 3

4 ответа:

Попробуйте эту линию. Это может сработать для тебя.

[self.picker dismissModalViewControllerAnimated:NO];

И для iOS 6 и позже использовать этот

[self.picker dismissViewControllerAnimated:NO completion:nil];

Также используйте этот код для представления вашего контроллера выбора

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
    [self presentViewController:self.picker animated:YES completion:nil];
} else {
    //To target iOS 5.0
    [self presentModalViewController:self.picker animated:YES];
}

Вы используете iOS 6? Если это так, то presentModalViewController: является устаревшим и может привести к некоторым неожиданным результатам. Попробуйте вместо этого использовать presentViewController:animated:completion:.

Но технически, вот все, что вам нужно сделать:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)imagePicker
{
   [imagePicker dismissViewControllerAnimated:NO completion:nil];//Or call YES if you want the nice dismissal animation
}

Для Swift используйте следующее:

func imagePickerControllerDidCancel(picker: UIImagePickerController!) {
    picker.dismissViewControllerAnimated(true, completion: nil)
}

Для Swift 4:

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
}