【问题标题】:Using UIImagePickerController for multiple uiimageviews. (Using more than one UIButton)对多个 uiimageviews 使用 UIImagePickerController。 (使用多个 UIButton)
【发布时间】:2012-07-29 05:05:16
【问题描述】:

我有 2 个 uiimage 视图(imageview 和 imageview2)和 2 个 uibuttons(useCameraRoll 和 useCameraRoll2)我已经实现了使用 2 个按钮在这些视图上设置图像的代码。

imageview 与它的按钮 useCameraRoll 一起工作正常,但是当我使用 useCameraRoll2 设置图像时,它会更改 imageview 的图像而不是 imageview2。

视图/按钮 1 的代码:

- (IBAction) useCameraRoll: (id)sender
{
    if ([self.popoverController isPopoverVisible]) {
        [self.popoverController dismissPopoverAnimated:YES];
    } else {
        if ([UIImagePickerController isSourceTypeAvailable:
             UIImagePickerControllerSourceTypeSavedPhotosAlbum])
        {
            UIImagePickerController *imagePicker =
            [[UIImagePickerController alloc] init];
            imagePicker.delegate = self;
            imagePicker.sourceType =
            UIImagePickerControllerSourceTypePhotoLibrary;
            imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                      (NSString *) kUTTypeImage,
                                      nil];
            imagePicker.allowsEditing = NO;

            self.popoverController = [[UIPopoverController alloc]
                                      initWithContentViewController:imagePicker];

            self.popoverController.delegate = self;

            [self.popoverController presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

            newMedia = NO;
        }
    }
}





#pragma mark -
#pragma mark UIImagePickerControllerDelegate

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info


{
    [self.popoverController dismissPopoverAnimated:true];
    NSString *mediaType = [info
                           objectForKey:UIImagePickerControllerMediaType];
   // [self dismissModalViewControllerAnimated:YES];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image = [info
                          objectForKey:UIImagePickerControllerOriginalImage];

        self.imageView.image = image;
        if (newMedia)
            UIImageWriteToSavedPhotosAlbum(image,
                                           self,  
                                           @selector(image:finishedSavingWithError:contextInfo:),
                                           nil);
    }
    else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
    {
        // Code here to support video if enabled
    }
}

视图/按钮 2 的代码:

- (IBAction) useCameraRoll2: (id)sender
{
    if ([self.popoverController2 isPopoverVisible]) {
        [self.popoverController2 dismissPopoverAnimated:YES];
    } else {
        if ([UIImagePickerController isSourceTypeAvailable:
             UIImagePickerControllerSourceTypeSavedPhotosAlbum])
        {
            UIImagePickerController *imagePicker2 =
            [[UIImagePickerController alloc] init];
            imagePicker2.delegate = self;
            imagePicker2.sourceType =
            UIImagePickerControllerSourceTypePhotoLibrary;
            imagePicker2.mediaTypes = [NSArray arrayWithObjects:
                                      (NSString *) kUTTypeImage,
                                      nil];
            imagePicker2.allowsEditing = NO;

            self.popoverController2 = [[UIPopoverController alloc]
                                      initWithContentViewController:imagePicker2];

            self.popoverController2.delegate = self;



            [self.popoverController2 presentPopoverFromRect:((UIButton *)sender).bounds inView:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

            newMedia = NO;
        }
    }
}


#pragma mark -
#pragma mark UIImagePickerControllerDelegate

-(void)imagePickerController2:(UIImagePickerController *)picker2
didFinishPickingMediaWithInfo:(NSDictionary *)info2
{
    [self.popoverController2 dismissPopoverAnimated:true];
    NSString *mediaType2 = [info2
                           objectForKey:UIImagePickerControllerMediaType];
    // [self dismissModalViewControllerAnimated:YES];
    if ([mediaType2 isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image2 = [info2
                          objectForKey:UIImagePickerControllerOriginalImage];

        self.imageView2.image = image2;
        if (newMedia2)
            UIImageWriteToSavedPhotosAlbum(image2,
                                           self,  
                                           @selector(image:finishedSavingWithError:contextInfo:),
                                           nil);
    }
    else if ([mediaType2 isEqualToString:(NSString *)kUTTypeMovie])
    {
        // Code here to support video if enabled
    }
}

我已经检查了界面生成器中的所有连接都连接到了正确的视图。

有人知道为什么会这样吗

问候

【问题讨论】:

  • 有人有想法吗?这已经在这里 2 个月了
  • 如果我的回答解决了你的问题,也许你应该接受我的回答。否则,请添加评论以说明解决方案是什么。

标签: iphone xcode uiimageview uibutton uiimagepickercontroller


【解决方案1】:

我认为您的问题可能来自您的委托:您的 2 UIImagePickerController 使用相同的委托“self”。以下方法:

-(void)imagePickerController2:(UIImagePickerController *)picker2 didFinishPickingMediaWithInfo:(NSDictionary *)info2

实际上从未被调用过,也不是UIImagePickerControllerDelegate 的有效声明。

您将需要区分哪个操作来自您的选择器,并在您的单一委托方法的代码中相应地更新正确的图像。

也许你可以创建一个实例变量:

UIImageView *_currentPickerTarget

然后在每种情况下显示选择器之前设置此变量:

- (IBAction) useCameraRoll: (id)sender {
    (...)
    _currentPickerTarget = imageView;
}

- (IBAction) useCameraRoll2: (id)sender {
    (...)
    _currentPickerTarget = imageView2;
}

然后在您的委托方法中,您只需通过替换来更新_currentPickerTarget

self.imageView.image = image;

_currentPickerTarget.image = image;

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 函数中。

希望这会有所帮助。 克里斯托夫

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多