raymondis raymondis - 1 year ago 201
iOS Question

How to select an Image from Gallery in Xamarin.ios

I want to load an Image from Gallery and display it on a


I tried to do it like in the sample in Xamarin Recipes, but all I get is null.


My Code so far:

public partial class ViewController : UIViewController
UIImagePickerController imagePicker;
UIButton choosePhotoButton;
UIImageView imageView;

public ViewController(IntPtr handle) : base(handle)

public ViewController()

public override void ViewDidLoad()
Title = "Wähle Bild aus:";
View.BackgroundColor = UIColor.White;

imageView = new UIImageView(new CGRect(10, 150, 300, 300));

choosePhotoButton = UIButton.FromType(UIButtonType.RoundedRect);
choosePhotoButton.Frame = new CGRect(10, 80, 100, 40);
choosePhotoButton.SetTitle("Picker", UIControlState.Normal);
choosePhotoButton.TouchUpInside += (s, e) =>
imagePicker = new UIImagePickerController();

imagePicker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
imagePicker.MediaTypes = UIImagePickerController.AvailableMediaTypes(UIImagePickerControllerSourceType.PhotoLibrary);

imagePicker.FinishedPickingMedia += Handle_FinishedPickingMedia;
imagePicker.Canceled += Handle_Canceled;

NavigationController.PresentModalViewController(imagePicker, true);




private void Handle_Canceled(object sender, EventArgs e)

protected void Handle_FinishedPickingMedia(object sender, UIImagePickerMediaPickedEventArgs e)
bool isImage = false;
switch (e.Info[UIImagePickerController.MediaType].ToString())
case "public.image":
Console.WriteLine("Image selected");
isImage = true;
case "public.video":
Console.WriteLine("Video selected");

// get common info (shared between images and video)
NSUrl referenceURL = e.Info[new NSString("UIImagePickerControllerReferenceUrl")] as NSUrl;
if (referenceURL != null)
Console.WriteLine("Url:" + referenceURL.ToString());

// if it was an image, get the other image info
if (isImage)
// get the original image
UIImage originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage;
if (originalImage != null)
// do something with the image
imageView.Image = originalImage; // display

UIImage editedImage = e.Info[UIImagePickerController.EditedImage] as UIImage;
if (editedImage != null)
// do something with the image
Console.WriteLine("got the edited image");
imageView.Image = editedImage;

// dismiss the picker

I get null at this line:
NavigationController.PresentModalViewController(imagePicker, true);

What I'm doing wrong?

Thanks for any help!

Kind Regards,

Answer Source

Appears that you are not using a UINavigationController, so change:

NavigationController.PresentModalViewController(imagePicker, true);


PresentModalViewController(imagePicker, true);

Note: PresentModalViewController is deprecated since ios6, so you can change your code to use:

PresentViewControllerAsync(imagePicker, true);


PresentViewController(imagePicker, true, () => {
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download