点击“快速查看”图标后,文档未打开

问题描述 投票:0回答:2

我的任务是实现“快速查看”功能,以呈现打开所选文档的选项。我使用 UIDocumentInteractionController 的 PresentOptionsMenu 方法来显示选项。显示“快速查看”图标,但当我单击它时什么也没有发生。带有选项的弹出窗口关闭并且文档未打开。

我做错了什么?为什么单击“快速查看”图标后无法打开文档?

The popup displayed after selecting a document

我的代码是:

public class DataViewer
{
     public event EventHandler DocumentOpened;

     public async Task OpenDocument(string filePath)
     {
         var viewer = UIDocumentInteractionController.FromUrl(new NSUrl(filePath, false));
         viewer.WillBeginSendingToApplication += async (sender, args) =>
         {
             DocumentOpened?.Invoke(this, EventArgs.Empty);
         };
         var controller = UIApplication.SharedApplication.KeyWindow.RootViewController;
         viewer.PresentOptionsMenu(controller.View.Frame, controller.View, true);
     }
}
c# xamarin.forms xamarin.ios quicklook
2个回答
1
投票

需要标明

ViewController
以呈现文档预览。

尝试在委托中实现方法

ViewControllerForPreview
UIDocumentInteractionControllerDelegate

var viewer = UIDocumentInteractionController.FromUrl(new NSUrl(filePath, false));
viewer.WillBeginSendingToApplication += async (sender, args) =>
{
    DocumentOpened?.Invoke(this, EventArgs.Empty);
};
var controller = UIApplication.SharedApplication.KeyWindow.RootViewController;

viewer.Delegate = new MyClass(controller);   //add this line
viewer.PresentOptionsMenu(controller.View.Frame, controller.View, true);


 public class MyClass : UIDocumentInteractionControllerDelegate
    {
        readonly UIViewController _controller;
        public MyClass(UIViewController controller)
        {
            _controller = controller;
        }

        public override UIViewController ViewControllerForPreview(UIDocumentInteractionController controller)
        {
            return _controller;
        }

        public override UIView ViewForPreview(UIDocumentInteractionController controller)
        {
            return _controller.View;
        }
    }

参考

https://stackoverflow.com/a/34326921/8187800

https://stackoverflow.com/a/58269780/8187800


0
投票

@ColeX 富有洞察力的答案的另一种选择是简单地设置

ViewControllerForPreview
属性。

viewer.ViewControllerForPreview = _ => UIApplication.SharedApplication.KeyWindow.RootViewController;

这样,您就不必从头开始定义完整的委托类及其涉及的所有令人头疼的问题和边缘情况。

© www.soinside.com 2019 - 2024. All rights reserved.