9

後で操作するためにデバイスの写真ライブラリから画像を選択できるユニバーサルアプリがあります。コードはiPadで正常に機能しますが、iPhoneでは何も起こりません。キャンセルボタンもありません。画像を選択した後は、ここでも何も起こりません。私のコード:

-(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");
}
4

6 に答える 6

21

以下のコードを使用する代わりに。

[[picker parentViewController] dismissModalViewControllerAnimated:YES];

このコードを試してください

[self dismissModalViewControllerAnimated:YES];

UIImagePickerControllerDelegateまた、インターフェイスファイルに追加したかどうかも確認してください。

解決策:(私のコメントから)

これを試してください[self.imgPicker dismissModalViewControllerAnimated:YES]; これはうまくいきます。

iOS 7の場合:現在のViewControllerを閉じるには

[self.imgPicker dismissViewControllerAnimated: YES completion: NULL];
于 2012-04-21T17:26:58.997 に答える
8

UIImagePickerControllerDelegateインターフェイスファイルに追加します

次に、このコードを.mファイルに実装します

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

それがあなたの問題を解決することを願っています。

于 2012-04-22T06:43:13.020 に答える
2

ピッカーを呼び出す親コントローラーのviewWillAppearまたはviewDidAppearメソッドを確認してください。iPhoneでは、ピッカービューが消えた後にこのメソッドが呼び出されます。iPadでポップオーバーが消えた後は呼び出されません。viewWillAppearで選択した画像のnilをivarに設定したコードで、エラーが見つかりました。何が起こっているのかを理解するのに2日かかります;)頑張ってください!

于 2013-12-02T23:09:21.503 に答える
2

最も簡単な解決策:

インターフェイスファイルにUIImagePickerControllerDelegateを追加します

次に、このコードを.mファイルに実装します

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker  dismissViewControllerAnimated:YES completion:nil];
}
于 2015-06-26T12:53:50.760 に答える
1

Swift 3.0

MBHのおかげで、これは私のXcode8およびiOS10プロジェクトで機能しました。

internal func imagePickerControllerDidCancel(_ picker: UIImagePickerController){
    dismiss(animated: true, completion: nil)
}
于 2017-01-10T00:58:20.013 に答える
0

Swiftで閉じるには:

これらのプロトコルをViewControllerに追加した後:UINavigationControllerDelegate, UIImagePickerControllerDelegate

internal func imagePickerControllerDidCancel(picker: UIImagePickerController){
    dismissViewControllerAnimated(true, completion: nil)
}
于 2015-12-22T21:52:37.787 に答える