0

バーボタンのアイテムがタップされると、ポップオーバービューは正常に表示されますが、写真が選択されても閉じません。何か不足していますか?私は何をすべきか?

-(IBAction)addPhoto:(UIBarButtonItem *)sender
{
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo
{   
    // Delete any existing image.
    NSManagedObject *oldImage = imageClass.image;
    if (oldImage != nil)
    {
        [imageClass.managedObjectContext deleteObject:oldImage];
    }

    // Create an image object for the new image.
    NSManagedObject *myImage = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:imageClass.managedObjectContext];
    imageClass.image = myImage;

    // Set the image for the image managed object.
    [image setValue:selectedImage forKey:@"image"];

    [popover dismissPopoverAnimated:YES];
}


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

7 に答える 7

2

問題は、イメージ ピッカー コントローラーを閉じようとしているが、それが含まれているポップオーバーを閉じる必要があることです。表示方法に基づいて物事を閉じる必要があります。

変化する:

[self dismissViewControllerAnimated:YES completion:nil];

に:

[popover dismissPopoverAnimated:YES];

dismissViewControllerAnimated:completion:を呼び出した場合は、呼び出しが使用されますpresentViewController:animated:completion:

于 2012-11-30T03:50:26.043 に答える
1

ギャラリーからの写真の選択で UIPopoverViewController を閉じるには、didFinishPickingMediaWithInfo画像を選択した後にメソッドに次の行を追加する必要があります。

- (void)imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary *)info {
     [popover dismissPopoverAnimated:YES];
     [imagePicker dismissModalViewControllerAnimated:YES];
}
于 2012-11-30T05:38:12.113 に答える
0

UIImagePickerControllerDelegateを対応する.hファイルに追加し、このコードも確認する必要があります

 -(IBAction)addPhoto:(UIBarButtonItem *)sender 
{
  UIImagePickerController *imagePicker3 = [[UIImagePickerController alloc] init];
  imagePicker3.delegate = self;
  imagePicker3.sourceType = UIImagePickerControllerSourceTypeCamera;
  imagePicker3.allowsEditing = YES;
  imagePicker3.mediaTypes = [NSArray arrayWithObject:@"public.image"]
  [self presentModalViewController:imagePicker3 animated:YES];

}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[self dismissModalViewControllerAnimated:YES];
_imageselected.image=[info valueForKey:UIImagePickerControllerEditedImage];

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

 }
于 2012-11-30T05:48:21.060 に答える
0

デリゲートUIPopoverControllerDelegateをファイルUIImagePickerControllerDelegateに渡すだけです.h

于 2012-11-30T05:10:41.110 に答える
0

delegate自分自身に設定していませんimagePickerpopoverさらに、デリゲート メソッドで閉じるには、インスタンス変数として受け取る必要があります。

于 2012-11-30T04:35:21.997 に答える
0

1) .h に追加する必要があります<UIImagePickerControllerDelegate> 2)メソッドを次のように追加しますimagePicker.delegate=self;addPhoto

-(IBAction)addPhoto:(UIBarButtonItem *)sender {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate=self;  //add this line to your code
popover = [[UIPopoverController alloc]
           initWithContentViewController:imagePicker];

[popover presentPopoverFromBarButtonItem:sender
                permittedArrowDirections:UIPopoverArrowDirectionAny
                                animated:YES];
}
于 2012-11-30T04:49:01.587 に答える
0

UIImagePickerController を使用しているときに、この悪名高いエラーが引き続き発生する場合:

Assigning to 'id <UINavigationControllerDelegate,UIImagePickerControllerDelegate>' from   incompatible type 'DetailViewController *const __strong'

動かしてみる

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;

- (void)viewDidLoad{
  //do your stuff
}

対応する .h ファイルにデリゲート プロトコル定義 (<UINavigationControllerDelegate,UIImagePickerControllerDelegate>) を含めることを忘れないでください。

これで私の問題は解決しました。他の人に役立つことを願っています。それが最善の解決策かどうかはわかりませんが、同様のケースでうまくいきました。

于 2013-07-05T16:01:32.643 に答える