【问题标题】:Open gallery in simulator on image tap通过图像点击在模拟器中打开图库
【发布时间】:2016-07-29 18:08:44
【问题描述】:

我想在单击按钮时在 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 视图,对吧?怎么做? 如果我错了,请纠正我。

【问题讨论】:

    标签: c# ios xaml xamarin.forms uiimagepickercontroller


    【解决方案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 将为空,因此请确保在此之后进行任何调用,如果您从正在运行的应用程序触发此操作而不是在启动时立即触发,则应始终如此。

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

    【讨论】:

    • 感谢您的解释。让我试试然后回来。 :)
    • 我收到此警告:尝试显示其视图不在窗口层次结构中的
    • 看起来并没有为我们提供对您应该调用的实际 UINavigationController 的引用。在这里查看接受的答案stackoverflow.com/questions/29912739/… 看看是否对您有帮助。
    • 尝试了接受的答案。但似乎只有一个视图控制器,而且类型也是:Xamarin.Forms.Platform.iOS.PageRenderer.
    • 嘿,发现这个链接对我有用。 forums.xamarin.com/discussion/28091/uiimagepickercontroller
    猜你喜欢
    • 2023-03-03
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多