在图像点击模拟器中打开图库

时间:2016-07-28 12:53:32

标签: c# ios xaml xamarin.forms uiimagepickercontroller

我想在点击按钮后在iPhone模拟器中打开图库。 我正在使用Xamarin表单--xaml来创建页面和图像视图。

到目前为止我已实施的内容: 我有一个特定于iOS的GalleryService,它实现了具有selectImage方法的IGalleryService。 selectImage创建一个UIImagePickerController _imagePicker。

在iOS特定应用中,我会做

 NavigationController.PresentModalViewController(_imagePicker, true);

但是如何在xamarin表单中使用Navigation做类似的事情?

PS:我在.xaml文件中创建了视图,并在xaml.cs文件中移过页面,如

Navigation.PushModalAsync(page)

这里,页面必须基本上包含_imagePicker视图,对吗?怎么做? 如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:1)

Xamarin.Forms实际上利用iOS上的单个NavigationController来托管所有不同的页面。所有Xamarin内容页面导航都在XF内部进行,在单个主NavigationController中。

您无法在NavigationPage堆栈中混合使用其他本机视图控制器。但是你可以使用你通常会使用的所有本机代码,只需将形成用途的一个NavigationController视为单个“屏幕”。

在iOS原生项目中,您可以使用

var topController = UIApplication.SharedApplication.KeyWindow.RootViewController;
while (topController.PresentedViewController != null) {
    topController = topController.PresentedViewController;
}
topController.PresentViewController (_imagePicker, true, null);

访问XF的视图控制器,找到最顶层的视图控制器并像在“本机”ios应用程序中那样使用它来呈现模态视图。

请注意,在“LoadApplication”完成之前,此RootViewController将为null,因此请确保在此之后进行任何调用,如果您从正在运行的应用程序触发此操作而不是在启动时立即执行此操作,则应始终如此。

如果使用PCL,您需要某种形式的DependencyService来从共享代码触发此调用,并且您可能需要在本机应用程序中使用更多逻辑来将结果返回到共享代码中。您还需要在可能针对您的应用定位的任何其他平台上重新实现此功能(例如Android或UWP)。