iOS SDK:預覽和開啟文檔

來源:互聯網
上載者:User

http://mobile.tutsplus.com/tutorials/iphone/previewing-and-opening-documents-with-uidocumentinteractioncontroller/

iOS中的沙箱可以讓平台更加的安全,這也是沙箱給使用者帶來的最主要好處。不過由於沙箱的嚴格限制,導致程式之間共用資料比較麻煩。一般在程式間共用文檔可以通過UIDocumentInteractionController(該類經常被開發人員忽略)。本文中,我將介紹如何使用這個類在其它程式(已經安裝在裝置中的程式)中預覽和開啟文檔。
 
UIDocumentInteractionController在iOS 3.2中就已經存在了,使用起來非常靈活,功能也比較強大。它除了支援同裝置上app之間的文檔分享外,還可以實現文檔的預覽、列印、發郵件以及複製。
 
UIDocumentInteractionController的使用非常簡單。首先通過調用它唯一的類方法 interactionControllerWithURL:,並傳入一個URL(NSURL),來初始化一個執行個體對象。之後設定一下這個view controller的delegate屬性,並實現一些恰當的delegate方法。
 
注意,UIDocumentInteractionController並不是UIViewController的子類,所以必須通知document interaction controller使用哪個view controller來預覽文檔。
 
Step 1: 設定項目
在同裝置app之間開啟文檔非常有用,一個常見的執行個體是在圖片編輯器中開啟圖片,比如iPhoto。
 
在 Xcode中建立一個新項目,選擇“Single View Application”模板。命名文檔,鍵入公司標識符,Device選擇iPhone,裝置下邊選擇“Use Automatic Reference Counting”,其他兩項不選。然後點擊“Next”,儲存項目,點擊“Creat”按鈕。


 Step 2: 建立使用者介面
這個程式的使用者介面包括兩個按鈕,一個是用於在其他app中預覽PDF文檔,另一個是使用者在其他app中開啟PDF文檔。建立使用者介面之前,在viewcontroller執行檔案中為每個按鈕賦予一個動作,如下:
1.- (IBAction)previewDocument:(id)sender {
2.}
 
1.- (IBAction)openDocument:(id)sender {
2.}
 
選擇MTViewController.xib,我們需要從右邊view controller視圖中拖拽兩個UIButton執行個體。選擇左邊的File’s Owner objectobject,開啟Connections Inspector,把先前建立的動作和按鈕串連起來。
 

Step 3:預覽文檔
現在支援的是PDF文檔,你可以使用任何PDF文檔,但是在關於這個技巧的源檔案中,我已經包含了一個PDF例子,就是蘋果的iOS編程指南,也可以線上獲得。把文檔拖至你的項目中,選中“ Copy items into destination group’s folder (ifneeded)”這個複選框,最後確保檔案已經添加至下邊的“Documents target”中。

使用UIDocumentInteractionController類注意事項:1. 你需要儲存著document interation controller的執行個體。2.需要實現UIDocumentInteractionControllerDelegate協議。
 
首先更新viewcontroller的標頭檔(如下所示)來告訴compiler,MTViewController類遵照UIDocumentInteractionControllerDelegate協議。
1.#import <UIKit/UIKit.h>
2.@interface MTViewController : UIViewController<UIDocumentInteractionControllerDelegate>
3.@end
 
在view controller的實現檔案中,添加一個私人屬性,類型為UIDocumentInteractionController,並將名稱命名為 documentInteractionController。這個屬性儲存區著document interaction controller,之後會用著。
 
看看previewDocument:方法的實現,首先獲得文檔的URL (NSURL) ,由於文檔是app的一部分,因此通過NSBundle類獲得文檔的(NSURL)非常容易,如下:
 
1.- (IBAction)previewDocument:(id)sender {
2.    NSURL *URL = [[NSBundle mainBundle] URLForResource:@"sample"withExtension:@"pdf"];
3.    if (URL) {
4.        // Initialize Document InteractionController
5.        self.documentInteractionController= [UIDocumentInteractionController 
interactionControllerWithURL:URL];
6.        // Configure Document InteractionController
7.        [self.documentInteractionControllersetDelegate:self];
8.        // Preview PDF
9.       [self.documentInteractionController presentPreviewAnimated:YES];
10.    }
11.}
 
如果返回了一個有效URL,我們初始化一個UIDocumentInteractionController的執行個體,並且通過文檔的URL。在 documentInteractionController的屬性中我們儲存了一個document interaction controller的引用。view controller將會充當document interaction controller的delegate
 
如果現在運行app,你會注意到點擊預覽按鈕時,什麼都沒有發生。因為這裡我們首先要實現一個delegate method。
 
前邊提到,UIDocumentInteractionController類並不是UIViewController的子類,而是繼承自 NSObject。我們需要通知documentinteraction controller使用哪個view controller進行文檔預覽。
 
UIDocumentInteractionControllerDelegate中有一個名documentInteractionControllerViewControllerForPreview:的delegate方法,該方法請求獲得一個用於顯示(預覽)文檔的viewcontroller。
 
我們希望在main viewcontroller中顯示預覽,所以可簡單的返回self,如下代碼所示。它的意思是document interfation controller將使用我們的view controller來預覽PDF文檔——以modal view的方式顯示文檔。
 
1.- (UIViewController *)documentInteractionControllerViewControllerForPreview: 
(UIDocumentInteractionController *) controller {
2.    return self;
3.
 
當然你可以簡化documentInteractionControllerViewControllerForPreview:的實現以滿足你的需要。執行委託方法的同時,你可以首次運行app,試試看這個效果,你可以通過郵件分享這個文檔,可以列印或者複製。另外,也可以在支援該文件類型的其他app中開啟文檔,在圖中點擊右邊的按鈕,看看我說的什麼意思。

Step 4: 開啟文檔
為了實現這一目的我們需要實現openDocument:方法。在openDocument:方法中,擷取到在程式bundle中一個PDF檔案的url,用這個url初始化一個UIDocumentInteractionController。

 

之後設定一下UIDocumentInteractionController的 delegate,在這個UIDocumentInteractionController中調用 presentOpenInMenuFromRect:inView:方法顯示一個菜單。傳入的第一個參數CGRect是button的frame,如下所示:
1.- (IBAction)openDocument:(id)sender {
2.    UIButton *button = (UIButton *)sender;
3.    NSURL *URL = [[NSBundle mainBundle]URLForResource:@"sample" withExtension:@"pdf"];
4.    if (URL) {
5.        // Initialize Document InteractionController
6.        self.documentInteractionController= [UIDocumentInteractionController 
interactionControllerWithURL:URL];
7.        // Configure Document InteractionController
8.       [self.documentInteractionController setDelegate:self];
9.        // Present Open In Menu
10.        [self.documentInteractionControllerpresentOpenInMenuFromRect:[button frame] inView:self.view animated:YES];
11.    }
12.}
 
為了測試openDocument:方法,在真機上運行執行個體app非常重要。原因很簡單,作業系統要檢查安裝的app是否支援我們要開啟的檔案類型(UTI)。如果沒有找到支援相應檔案類型的app,那麼菜單中就不會有開啟的提示,而這個不能通過iOS模擬器進行測試。
 
為了測試這個功能,首先要在真機上安裝支援PDF的app,比如Dropbox或者Amazon的Kindle app。

總結
使用UIDocumentInteractionController這個類可以簡單地實現app之間文檔的預覽和開啟。建議你去看看這個類的參考文檔,特別是UIDocumentInteractionControllerDelegate協議——這裡面有許多delegate


方法,當遇到大文檔或者複雜的工作流程時,這些方法都非常的方便。

源檔案:

 

http://download.csdn.net/detail/ydj213/5405941


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.