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

Open gallery in simulator on image tap

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

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

在 iOS 个特定的应用程序中,我会做

 NavigationController.PresentModalViewController(_imagePicker, true);

但是如何使用 xamarin 表单中的导航来做类似的事情?

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

Navigation.PushModalAsync(page)

到这里,页面基本上就包含了_imagePicker视图吧?怎么做? 如有不妥欢迎指正

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

您不能在 NavigationPage 堆栈中混合使用其他本机视图控制器。但是您可以使用您通常使用的所有本机代码,并且只将表单使用的一个 NavigationController 视为单个 "screen"。

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

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

要访问 XF 的视图控制器,请找到最上面的那个并像在 "native" ios 应用程序中一样使用它来呈现模态视图。

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

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