Ios 在UIView中使用UIImagePickerController

Ios 在UIView中使用UIImagePickerController,ios,ipad,uiview,uiimageview,uiimagepickercontroller,Ios,Ipad,Uiview,Uiimageview,Uiimagepickercontroller,我有一个按钮,当我点击它时,它会显示相机(工作正常) 之后,我可以拍摄图像,等等,但当我点击“使用”时:我的方法是什么也不发生:图像选择器不会关闭它的LELF:应用程序只是什么都不做,我试图拍摄我刚刚拍摄的图像,并将其显示在屏幕上的CGRect中 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [pick

我有一个按钮,当我点击它时,它会显示相机(工作正常)

之后,我可以拍摄图像,等等,但当我点击“使用”时:我的方法是什么也不发生:图像选择器不会关闭它的LELF:应用程序只是什么都不做,我试图拍摄我刚刚拍摄的图像,并将其显示在屏幕上的CGRect中

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissViewControllerAnimated:YES completion:NULL];

    UIImageView *patientImage = [[UIImageView alloc] init];
    patientImage.frame = CGRectMake(625, 25, 83, 103);

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.patientImage.image = chosenImage;
}
即使我在没有拍摄图像的情况下按下“取消”按钮,imagePicker(相机界面)也不会自动关闭

任何帮助、建议或指导都将不胜感激。

但要:

[self presentViewController:imagePicker animated:YES completion:nil];

删除
[self.addSubView:imagePicker.view]而不是

[自呈现视图控制器:图像选择器动画:是完成:空]

虽然未定义变量
picker
,但您正在取消变量
picker
。改为:

[自我解除ModalViewController激活:是完成:空]

并确保它位于方法的末尾。

UIView
子类中的
getPhoto:
方法吗

如果是这样,那么最好:

  • getPhoto:
    代码完全移出
    UIView
    子类,并将其放入视图的父视图控制器中

  • 使您的
    UIButton
    成为UIView的属性:
    @property(非原子,强)UIButton*myButton

  • 在视图控制器中,按如下方式设置按钮的目标和操作:

    [myView.myButton addTarget:self action:@selector(getPhoto:) forControlEvents:UIControlEventTouchUpInside];
    
  • 最后,在
    getPhoto:
    方法中,调用
    [self-presentViewController:imagePicker-animated:YES-completion:NULL]

  • 您的
    -(void)imagePickerController:(UIImagePickerController*)选取器未完成使用信息的pickingMediaWithInfo:(NSDictionary*)信息
    代码也应进入视图控制器,更改
    self.patientImage.image=chosenImage
    myView.patientImage.image=chosenImage


  • 不知道为什么取消按钮不起作用。 但进行此更改时,它将选择您正在单击的图像

    如果需要取消事件,请通过创建自定义
    UIBarButton
    并添加来添加它

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    
    UIImageView *patientImage = [[UIImageView alloc] init];
    patientImage.frame = CGRectMake(625, 25, 83, 103);
    
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    self.patientImage.image = chosenImage;
    
    [imagePicker.view removeFromSuperview];
    
    }
    
    尝试:


    不应将选择器添加为子视图,而应将选择器添加到
    UIPopoverController

    然后,您可以使用
    presentPopoverFromRect:inView:permittedRowDirections:animated:
    popover方法从
    UIView
    子类中显示它,如下所示:

    self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
    
    然后,您可以使用委托方法通过以下方式解除popover:

    [self.popover dismissPopoverAnimatedYES];
    
    以下各项要求:

    该表表明,在iPad上,如果指定源类型为
    UIImagePickerController源类型PhotoLibrary
    UIImagePickerController源类型SavedPhotosalbum
    ,必须显示 使用popover控制器的图像选择器,如中所述 UIPopoverController类中的“显示和取消Popover” 参考资料。如果您尝试以模式显示图像选择器 (全屏)用于在保存的图片和电影中进行选择,系统 引发了一个异常

    在iPad上,如果指定源类型
    UIImagePickerController源类型摄像头
    ,您可以显示图像 选择器模式(全屏)或使用popover。然而,苹果公司 建议您仅全屏显示摄像头界面


    patientImage.frame=CGRectMake(625,25,83,103);这里是x在设备屏幕外:(所以你看不到图像,也看不到[picker DismissViewControllerInitiated:YES completion:NULL];在方法的末尾谢谢你Nitin,但我使用的是ipad,所以它在我的屏幕上,我试着重新定位dismissVieController,但没有成功地将patientImage添加到任何视图中?比如[自我添加子视图:patientImage];问题是presentViewController是UIViewController的一种方法,我需要这个应用程序在UIView中工作,你知道吗?一个视图不应该负责显示另一个控制器。这与iOS的核心MVC背道而驰。你应该让一个视图控制器这样做,正如这个答案中所建议的。当我在ViewController类的viewdidload方法我收到一个错误,说“在myView类型的对象上找不到PicBtn”-但我已将PicBtn声明为UIButton,并将其声明为UIView类“myView”标题中的属性对于那些同样对这个问题感兴趣的人,@vinnyCoyne说什么是正确的做法…但是你必须先创建myView类的实例,然后使用实例变量的名称来调用它,而不是调用
    myView.myButton
    。这解决了我的问题。谢谢
    self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
    
    [self.popover dismissPopoverAnimatedYES];