2016-12-20 7 views
0

버튼처럼 작동하는 이미지가있는 모달 탐색 페이지가 있습니다.Xamarin.Forms 경고 : iOS 이미지/제스처 인식기가있는 창 계층에보기가없는 * on *을 표시하려고 시도합니다.

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

그리고 그 뒤에있는 방법;

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; 
    } 
} 

공유 이미지/버튼을 클릭하면 오류가 발생합니다. On_Share 메서드 &의 첫 번째 줄에 중단 점을 넣었습니다. 중단되지 않았습니다.

Warning: Attempt to present <UIActivityViewController: 0x141b60f70> on <Xamarin_Forms_Platform_iOS_ModalWrapper: 0x1419a0920> whose view is not in the window hierarchy! 

Android에서 정상적으로 작동하며 iOS에서만 문제가 발생합니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다. 이미지를 클릭 할 때 다른 창이나 다른 것을 표시하려고하지 않습니다. 그럼에도 불구하고 프로세스가 On_Share 메서드의 시작 부분에 도달하기 전에 오류가 나타납니다. 내가 여기서 무엇을 놓치고 있니?

편집 : 메서드가 작동하지 않고 오류가 계속 발생합니다. 공유 시트를 보내려고 시도하고 있어야합니다.

답변

4

마지막으로 공유 플러그인에 문제가있었습니다. 코드 재귀를 사용하여 문제를 해결했습니다.

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

에 끌어 오기 요청을 제출 한