Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Xamarin在iPad上实现UIDocumentInteractionController_C#_Ios_Ipad_Xamarin_Uidocumentinteraction - Fatal编程技术网

C# 如何使用Xamarin在iPad上实现UIDocumentInteractionController

C# 如何使用Xamarin在iPad上实现UIDocumentInteractionController,c#,ios,ipad,xamarin,uidocumentinteraction,C#,Ios,Ipad,Xamarin,Uidocumentinteraction,我正在使用Xamarin开发一个iPad iOS 7.0应用程序,我想使用UIDocumentInteractionController来显示PDF。我使用了各种有关堆栈溢出的示例来获得正确的实现,但没有任何效果 这里有一个关于堆栈溢出的链接,我用它作为参考 我也使用了这个objective C教程,但无法正确地将代码翻译成C。 这是我的密码。我目前有一个工具栏按钮,当点击它时,应该会触发PDF预览。当我点击按钮时,什么也没有发生 我错过了什么才能让它发挥作用 public覆盖void Vi

我正在使用Xamarin开发一个iPad iOS 7.0应用程序,我想使用UIDocumentInteractionController来显示PDF。我使用了各种有关堆栈溢出的示例来获得正确的实现,但没有任何效果

这里有一个关于堆栈溢出的链接,我用它作为参考

我也使用了这个objective C教程,但无法正确地将代码翻译成C。

这是我的密码。我目前有一个工具栏按钮,当点击它时,应该会触发PDF预览。当我点击按钮时,什么也没有发生

我错过了什么才能让它发挥作用

public覆盖void ViewDidLoad()
{
base.ViewDidLoad();
documentInteractionController=新UIDocumentInteractionController();
string fileName=“Content/test.pdf”;
字符串localURL=Path.Combine(NSBundle.MainBundle.BundlePath,文件名);
NSUrl URL=新的NSUrl(localURL,false);
documentInteractionController=UIDocumentInteractionController.FromUrl(URL);
documentInteractionController.Delegate=新的UIDocumentInteractionControllerDelegateClass(此);
toolbarButton.Clicked+=委托(对象发送者,事件参数e){
调用主线程(委托{
documentInteractionController.PresentOpenMenu(View.Frame,View,true);
});
};
}
公共类UIDocumentInteractionControllerDelegateClass:UIDocumentInteractionControllerDelegate
{
UIVIEW控制器viewC;
公共UIDocumentInteractionControllerDelegateClass(UIViewController控制器)
{
viewC=控制器;
}
公共覆盖UIViewController ViewControllerForPreview(UIDocumentInteractionController控制器)
{
返回viewC;
}
公共覆盖UIView视图预览(UIDocumentInteractionController)
{
返回viewC.View;
}
公共覆盖矩形F矩形预览(UIDocumentInteractionController)
{
返回viewC.View.Frame;
}
}

在研究了这个问题后,在另一个论坛上问了相同的问题,并使用了不同的代码示例,我无法使用C#中的UIDocumentInteractionController使此代码正常工作。但是,我可以使用上面问题中链接的objective-c教程使其工作。这没有用,因为我需要C#而不是objective-C中的代码

在我的研究中,我发现了这篇关于堆栈溢出的文章,它使用了一个QLEVIEWCONTROLLER

这段代码正好提供了我的应用程序所需的内容。我对PDF文件的原始位置做了一个更改,它按预期工作

这是代码,从上面的文章中获取和修改,我正在使用它在一个快速预览控件中打开一个PDF,该控件具有“在中打开”功能

以下是控制器的代码:

QLPreviewController previewController= new QLPreviewController();             

previewController.DataSource=new MyQLPreviewControllerDataSource();     

this.PresentViewController(previewController,true, null);
以下是数据源的代码:

public class MyQLPreviewControllerDataSource : QLPreviewControllerDataSource { 

    public override int PreviewItemCount (QLPreviewController controller) {
        return 1;
    }

    public override QLPreviewItem GetPreviewItem (QLPreviewController controller, int index)
    {
        string fileName = @"example.pdf";
        var documents = NSBundle.MainBundle.BundlePath;
        var library = Path.Combine (documents,fileName);
        NSUrl url = NSUrl.FromFilename (library);
        return new QlItem ("Title", url);
    }
}
以下是QlItem的代码:

public class QlItem : QLPreviewItem 
    { 
        string title; 
        NSUrl uri; 

        public QlItem(string title, NSUrl uri) 
        { 
            this.title = title; 
            this.uri = uri; 
        } 

        public override string ItemTitle { 
            get { return title; } 
        } 

        public override NSUrl ItemUrl { 
            get { return uri; } 
        } 
    }

如果偶然发现这个问题,这可能会对某人有所帮助

在其他应用中打开文件在iOS模拟器中不起作用,因为它看不到任何其他应用。所以你应该在物理设备上测试它

您还需要为UIDocumentInteractionController提供Uti,如下所示:

documentInteractionController.Uti = @"com.adobe.pdf"

例如使用。

您能检测到用户是否选择在外部应用程序上打开文件吗?@nhenrique据我所知,iOS上的应用程序无法相互通信,这是出于设计。在这方面,无法检测用户是否选择在外部应用程序上打开文件。如果可能的话,那么我也想知道它是如何完成的。您好@ShawnRoser,请看一下。您可以检测用户选择的应用程序,并可能在调用事件didEndSendingToApplication之前显示加载