2014-02-20 18 views
4

我使用Xamarin開發iPad iOS 7.0應用程序,並且我想使用UIDocumentInteractionController來顯示PDF。我使用堆棧溢出的各種示例來獲得正確的實現,但沒有任何工作。如何在iPad上使用Xamarin實現UIDocumentInteractionController

這是一個關於Stack Overflow的鏈接,我用它作爲參考。

Monotouch open document - UIDocumentInterationController

我也用這個目標C教程,但一直無法正確轉換此代碼爲C#。 http://code.tutsplus.com/tutorials/previewing-and-opening-documents-with-uidocumentinteractioncontroller--mobile-15130

這是我的代碼。我目前有一個工具欄按鈕,點擊後可以觸發PDF預覽。當我點擊按鈕時沒有任何反應。

這是什麼工作失蹤?

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    documentInteractionController = new UIDocumentInteractionController(); 

    string fileName = "Content/test.pdf"; 
    string localURL = Path.Combine (NSBundle.MainBundle.BundlePath, fileName); 
    NSUrl URL = new NSUrl(localURL, false); 

    documentInteractionController = UIDocumentInteractionController.FromUrl (URL); 
    documentInteractionController.Delegate = new UIDocumentInteractionControllerDelegateClass(this); 

    toolbarButton.Clicked += delegate(object sender, EventArgs e){ 
     InvokeOnMainThread(delegate{ 
      documentInteractionController.PresentOpenInMenu(View.Frame, View, true); 
     }); 
    }; 
} 


public class UIDocumentInteractionControllerDelegateClass : UIDocumentInteractionControllerDelegate 
{ 
    UIViewController viewC; 

    public UIDocumentInteractionControllerDelegateClass(UIViewController controller) 
    { 
     viewC = controller; 
    } 

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

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

    public override RectangleF RectangleForPreview (UIDocumentInteractionController controller) 
    { 
     return viewC.View.Frame; 
    } 
} 

回答

3

研究這個問題,問同樣的問題在另一個論壇,並使用不同的代碼示例後,我無法獲得該代碼使用UIDocumentInteractionController工作在C#。但是,我可以使用上面問題中鏈接的objective-c教程來工作。這是沒有用的,因爲我需要在C#代碼而不是Objective-C。

在我的研究中,我發現這個帖子在堆棧溢出,而不是使用QLPreviewController。

Monotouch - Issue with QLPreviewController

此代碼提供正是我需要我的應用程序。我對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的代碼:

​​
+0

您可以檢測用戶是否選擇在外部應用程序上打開文件? – nhenrique

+0

@nhenrique這是我的理解iOS上的應用程序無法通過設計互相交談。在這方面,不可能檢測用戶是否選擇在外部應用程序上打開文件。如果可能的話,那麼我也想知道它是如何完成的。 –

+1

嗨@ShawnRoser,請看看這個http://stackoverflow.com/questions/30298405/detect-when-user-opens-file-in-app/30304547#30304547。你可以檢測到用戶選擇的應用程序和也許顯示一個加載,直到事件didEndSendingToApplication被調用 – nhenrique

1

如果偶然發現這個問題,這可能會有所幫助。

在其他應用程序中打開文件是不能在iOS模擬器中工作,因爲它沒有看到任何其他應用程序。所以,你應該在物理設備

你也需要提供UTI爲UIDocumentInteractionController這樣上測試它:

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

用於this xamarin forum topic例如。

相關問題