9 Stimmen

Probleme mit der Abbrechen-Schaltfläche von UIImagePickerController funktionieren nicht

Ich habe eine universelle App, die ein Bild aus dem Gerät Fotobibliothek für die spätere Bearbeitung auswählen können, der Code funktioniert gut auf dem iPad, aber nichts passiert auf dem iPhone, nicht einmal die Schaltfläche "Abbrechen" und nachdem ein Bild ausgewählt ist nichts passiert weder hier ist mein Code:

-(IBAction)grabImage:(id)sender
{
    if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
    imgPicker = [[UIImagePickerController alloc] init];
    [imgPicker setDelegate:self];

    popover = [[UIPopoverController alloc] initWithContentViewController:imgPicker];
    [popover setDelegate:self];

    CGPoint position        = [view1.superview convertPoint:view1.frame.origin toView:nil];
    CGRect popOverFrame     = CGRectMake( position.x, position.y, self.view.frame.size.width, self.view.frame.size.height );

    [popover presentPopoverFromRect:popOverFrame inView:self.view permittedArrowDirections:nil animated:NO];
    [popover setPopoverContentSize:CGSizeMake(320, 480)];
    [imgPicker release];
}
else
{
    imgPicker = [[UIImagePickerController alloc] init];
    imgPicker.delegate = self;
    imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentModalViewController:self.imgPicker animated:YES];
    [imgPicker release];
}
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    pickedImage = [info objectForKey:UIImagePickerControllerOriginalImage];

CGImageRef imgRef = pickedImage.CGImage;

    app->setImage( pickedImage, CGImageGetWidth(imgRef), CGImageGetHeight(imgRef) );

    [[picker parentViewController] dismissModalViewControllerAnimated:YES];

// Enable texture siwth after an image has been loaded
[textureSwitch setEnabled:YES];
[textureSwitch setOn:YES];
app->isTextureDrawingOn     = [textureSwitch isOn];

[fillsSwitch setOn:NO];
app->isFillsDrawingOn       = [fillsSwitch isOn];

    if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
    [popover dismissPopoverAnimated:YES];
}
ofLog(OF_LOG_VERBOSE, "cancel after selection");
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[[picker parentViewController] dismissModalViewControllerAnimated:YES];

if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
        [popover dismissPopoverAnimated:YES];
    }

ofLog(OF_LOG_VERBOSE, "did cancel");
}

21voto

Dinesh Raja Punkte 8433

Anstatt den folgenden Code zu verwenden.

[[picker parentViewController] dismissModalViewControllerAnimated:YES];

Versuchen Sie diesen Code

[self dismissModalViewControllerAnimated:YES];

und prüfen Sie auch, ob Sie UIImagePickerControllerDelegate in Ihrer Schnittstellendatei.

LÖSUNG: (Aus meinem Kommentar)

Versuchen Sie dies [self.imgPicker dismissModalViewControllerAnimated:YES]; Das wird funktionieren.

Für iOS 7: So verwerfen Sie einen vorhandenen View-Controller

[self.imgPicker dismissViewControllerAnimated: YES completion: NULL];

8voto

Q8Coder Punkte 101

Añadir UIImagePickerControllerDelegate in Ihrer Schnittstellendatei

und implementieren Sie diesen Code dann in Ihre .m Datei

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self dismissModalViewControllerAnimated:YES];
}

Ich hoffe, dass Ihr Problem damit gelöst ist.

2voto

Alexey Lobanov Punkte 104

Prüfen Sie die Methoden viewWillAppear oder viewDidAppear Ihres übergeordneten Controllers, der den Picker aufruft. Auf dem iPhone werden diese Methoden aufgerufen, nachdem die Picker-Ansicht verschwunden ist. Auf dem iPad werden sie nach dem Verschwinden des Popovers nicht aufgerufen. Ich habe gerade einen Fehler in meinem Code gefunden, wo ich nil auf ivar für das ausgewählte Bild in viewWillAppear gesetzt habe. ich habe zwei Tage gebraucht, um zu verstehen, was passiert ist ;) Viel Glück!

2voto

Ben-J Punkte 1027

Das ist die einfachste Lösung:

Fügen Sie UIImagePickerControllerDelegate in Ihre Schnittstellendatei ein

und implementieren Sie dann diesen Code in Ihre .m-Datei

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker  dismissViewControllerAnimated:YES completion:nil];
}

1voto

A.J. Hernandez Punkte 939

Swift 3.0

Dank MBH funktionierte dies für mich in meinem Xcode 8 und iOS 10 Projekt:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X