点击图片打开模拟器中的图库

本文关键字:模拟器 | 更新日期: 2023-09-27 17:59:07

我想在点击按钮后打开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视图,对吗?如何做到这一点?如果我错了,请纠正我。

点击图片打开模拟器中的图库

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)上重新实现这一点。