Monotouch-带iPad应用程序的UIImagePickerController

Monotouch-带iPad应用程序的UIImagePickerController,ipad,xamarin.ios,uiimagepickercontroller,uipopovercontroller,Ipad,Xamarin.ios,Uiimagepickercontroller,Uipopovercontroller,我有一个仅用于iPad的应用程序,我试图允许用户从他们的照片库中选择图像,在UIPopOverController中使用UIImagePickerController。我尝试了许多不同的方法来做这件事,但我可以得到任何工作。我看过很多代码片段,但我似乎无法让它们在Monotouch下工作 有人能告诉我做这件事的正确方法吗?非常感谢。以下是我在应用程序中使用的代码-这应该是让它工作的良好开端 UIImagePickerController imagePicker; UIPopoverControl

我有一个仅用于iPad的应用程序,我试图允许用户从他们的
照片库中选择图像
,在
UIPopOverController
中使用
UIImagePickerController
。我尝试了许多不同的方法来做这件事,但我可以得到任何工作。我看过很多代码片段,但我似乎无法让它们在Monotouch下工作


有人能告诉我做这件事的正确方法吗?非常感谢。

以下是我在应用程序中使用的代码-这应该是让它工作的良好开端

UIImagePickerController imagePicker;
UIPopoverController popOver;

void AttachImageBtnTouched(object sender, EventArgs e)
{
    if (popOver == null || popOver.ContentViewController == null)
    {
        imagePicker = new UIImagePickerController();
        popOver = new UIPopoverController(imagePicker);
        ImagePickerDelegate imgDel = new ImagePickerDelegate();
        imagePicker.Delegate = imgDel;
        imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
    }
    if (popOver.PopoverVisible)
    {
        popOver.Dismiss(true);
        imagePicker.Dispose();
        popOver.Dispose();
        return;
    }
    else
    {
        popOver.PresentFromRect(btnAttachment.Frame, this.View, UIPopoverArrowDirection.Any, true);
    }
}

// The Delegate class looks something like

public class ImagePickerDelegate : UIImagePickerControllerDelegate
{
    public ImagePickerDelegate()
    {}

    public override void FinishedPickingMedia(UIImagePickerController picker, NSDictionary info)
    {
        UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
        // do whatever else you'd like to with the image
    }
}

我必须调用创建图像选取器的代码和对从主线程选取的图像做出反应的代码,以使其正常工作:

    partial void OnImport (UIButton s)
    {
        BeginInvokeOnMainThread(delegate
        {

            UIImagePickerController picker = new UIImagePickerController();
            picker.ContentSizeForViewInPopover = new System.Drawing.SizeF(320,480);

            UIPopoverController popover = new UIPopoverController(picker);

            picker.FinishedPickingImage += delegate(object sender, UIImagePickerImagePickedEventArgs e) 
            {       
                BeginInvokeOnMainThread(delegate
                {
                    UIImage image = (UIImage)info.ObjectForKey(new NSString("UIImagePickerControllerOriginalImage"));
                    picker.DismissModalViewControllerAnimated(true);
                    // do something with image
                });

            };

            picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;     
            popover.PresentFromRect(s.Frame, this.View, UIPopoverArrowDirection.Left, true);                    
        });
    }