2013-02-07 1 views
11

Ich habe eine Anwendung für das Capture-Bild von der Kamera erstellt. Dies ist mein CodeAusnahme in iPad, UIImagePickerController muss über UIPopoverController präsentiert werden

-(IBAction) showCameraUI { 
    BOOL hasCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; 
    UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = hasCamera ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypePhotoLibrary; 
    [self presentModalViewController:picker animated:YES]; 
} 

und implementiert diese Delegatmethode für Holen Sie sich das aufgenommene Bild

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    UIImage *yourImageView = image; 
} 

implementiert diese Methode, wenn Benutzer die Steuerung

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

Abbrechen Aber es zeigt diese Ausnahme. Hat jemand eine Idee, warum es eine solche Ausnahme nach dem Ausführen der letzten Zeile der Funktion showCameraUI zeigt.

UIStatusBarStyleBlackTranslucent is not available on this device. 2013-02-07 
10:06:06.976 CaptureImage[460:c07] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be 
presented via UIPopoverController' 
+1

etwas nicht in Ordnung ist, weil ich die Frage Titel als _ „UIStatusBarStyleBlackTranslucent sehen ist nicht verfügbar für iPad“auf dieses Gerät _ – Tricertops

Antwort

14

In Bezug auf die Ausnahme ist die Fehlermeldung sehr klar. "Auf dem iPad muss UIImagePickerController über UIPopoverController angezeigt werden" Für iPad sollten Sie es in einem UIPopoverController statt [self presentModalViewController:picker animated:YES]; präsentieren. Dies sollte das Problem beheben.

Für zB: -

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker]; 
    [popover presentPopoverFromRect:self.view.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    self.popover = popover; 
} else { 
    [self presentModalViewController:picker animated:YES]; 
} 

Edit: Wie @rmaddy, Kamera erwähnt kann modal präsentiert werden. Das obige gilt, wenn sourceTypeUIImagePickerControllerSourceTypePhotoLibrary ist.

+1

ja habe ich versucht, diese aber es zeigt diese Ausnahme NSInvalidArgumentException Grund: vielen Dank‚Applicatin modal eine aktive Steuerung zu präsentieren versucht‘für Eure Hilfe. – Arun

+1

Probieren Sie dies einfach aus 'UIPopoverController * popover = [[UIPopoverController alloc] initWithContentViewController: picker]; [popover presentPopoverFromRect: self.view.bounds inView: self.view erlaubtArrowDirections: UIPopoverArrowDirectionAny animiert: YES]; '. Und nicht verwenden Sie diese Zeile an allen '[self PresentModalViewController: Picker animiert: YES];' – iDev

+1

es NSGenericException 'Grund zeigt: ‚- [UIPopoverController dealloc] erreicht, während popover noch sichtbar ist. Ich bin neu Entwickler ios so möchte ich etwas Hilfe meine Fähigkeiten zu verbessern, wo ich mein Lernen beginnen sollte ich lese gerade ein Buch ‚Beginning iPad Application Development‘, wo von hier – Arun

5

@Arun Ich bin auch vor dem gleichen Problem, globale Eigenschaft in Header-Datei hinzuzufügen.

ich den Code unten hoffen für Sie nützlich ist

UIImagePickerController *imgPicker = [[UIImagePickerController alloc] init]; 
    [imgPicker setDelegate:self]; 
    [imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [imgPicker setAllowsEditing:YES]; 
    [imgPicker setModalPresentationStyle:UIModalPresentationCurrentContext]; 

    UIPopoverController *popOver = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 
    popOver.delegate = self; 
    self.popoverImageViewController = popOver; 
    [self.popoverImageViewController presentPopoverFromRect:CGRectMake(0, 0, 160, 40) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

In diesem Header-Datei globale Eigenschaft erstellen, wie diese

@property (strong) UIPopoverController *popoverImageViewController;