Xamarin.Forms警告:尝试使用iOS图像/手势识别器显示其视图不在窗口层次结构中的* on *

时间:2016-12-20 11:40:32

标签: xamarin.ios xamarin.forms share uitapgesturerecognizer

我有一个模态导航页面,其中的图像就像一个按钮;

ref

背后的方法;

<Image Source ="share.png" HeightRequest="32" WidthRequest="32">
    <Image.GestureRecognizers>
        <TapGestureRecognizer Tapped="On_Share" />
    </Image.GestureRecognizers>
</Image>

当我尝试点击共享图片/按钮时,我收到了错误消息。我已将断点放入On_Share方法的第一行&amp;他们没有被击中。

async void On_Share(object sender, EventArgs e)
{
    if (CrossConnectivity.Current.IsConnected)
    {
        var message = "Share this";
        var title = "Share";
        await CrossShare.Current.Share(new ShareMessage { Text = message, Title = title}, new ShareOptions { ExcludedUIActivityTypes = new[] { ShareUIActivityType.PostToFacebook } });
    }
    else
    {
        NoInternetLabel.IsVisible = true;
    }
 }

请注意这在Android中运行良好,我只看到iOS中的问题。我不知道发生了什么 - 当我点击图片时,我并没有试图展示任何其他窗户或任何东西。无论如何,在进程到达On_Share方法的开头之前出现错误。我在这里缺少什么?

编辑:该方法现在确实受到了影响,我仍然遇到错误。它必须尝试发送共享表并失败...

1 个答案:

答案 0 :(得分:7)

最后共享插件存在问题 - 我们通过使代码的一部分递归来解决它。

GetVisibleViewController过去看起来像这样;

UIViewController GetVisibleViewController()
{
    var rootController = UIApplication.SharedApplication.KeyWindow.RootViewController;

    if (rootController.PresentedViewController == null)
        return rootController;

    if (rootController.PresentedViewController is UINavigationController)
    {
        return ((UINavigationController)rootController.PresentedViewController).VisibleViewController;
    }

    if (rootController.PresentedViewController is UITabBarController)
    {
        return ((UITabBarController)rootController.PresentedViewController).SelectedViewController;
    }

    return rootController.PresentedViewController;
}

而它需要循环查找顶部的UIViewController;

UIViewController GetVisibleViewController(UIViewController controller = null)
{
    controller = controller ?? UIApplication.SharedApplication.KeyWindow.RootViewController;

    if (controller.PresentedViewController == null)
        return controller;

    if (controller.PresentedViewController is UINavigationController)
    {
        return ((UINavigationController)controller.PresentedViewController).VisibleViewController;
    }

    if (controller.PresentedViewController is UITabBarController)
    {
        return ((UITabBarController)controller.PresentedViewController).SelectedViewController;
    }

    return GetVisibleViewController(controller.PresentedViewController);
}

我提出了问题并在github

上提交了拉取请求