iOS開發之UIDocumentInteractionController

來源:互聯網
上載者:User

在App的開發過程中,我們避免不了要開啟軟體中的檔案,例如:Excel檔案,Word檔案,圖片檔案等不同格式的檔案或者想要通過第三方的App來開啟這些檔案,那麼我們就要用到UIDocumentInteractionController和Quick Look來解決這些問題了。

在iOS系統跨App分享內容的幾種常用技術,比如 URL Scheme, AirDrop,UIDocumentInteractionController , UIActivityViewController
UIDocumentInteractionController是從iOS 3.2的SDK開始支援的,它是直接繼承的 NSObject。

我們就介紹UIDocumentInteractionController的簡單使用。

UIDocumentInteractionController
1.展示一個可以操作我們分享的文件類型的第三方App列表
2.在第一條展示列表的基礎上添加額外的操作,比如 複製 , 列印 , 預覽 , 儲存 等。
3.結合 Quick Look 架構直接展示文檔內容

核心代碼如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {            NSURL *url = [[NSBundle mainBundle] URLForResource:@"004" withExtension:@"png"];        //    NSString *docu = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    //    NSString *filePath = [docu stringByAppendingPathComponent:@"004.png"];    //    NSURL *url = [NSURL fileURLWithPath:filePath];            self.document = [UIDocumentInteractionController interactionControllerWithURL:url];    self.document.delegate = self;        // 不展示可選操作    //    [self.document presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];            // 展示可選操作    // 可結合代理方法documentInteractionControllerViewControllerForPreview:顯示預覽    [self.document presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES];    }- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller {    return self;}/** *  檔案分享面板退出時調用 */- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller {    NSLog(@"dismiss");}/** *  檔案分享面板彈出的時候調用 */- (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller {    NSLog(@"WillPresentOpenInMenu");    }/** *  當選擇一個檔案分享App的時候調用 */- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(nullable NSString *)application {    NSLog(@"begin send : %@", application);}
效果如下:

                            

注意點有:
1.要實現UIDocumentInteractionController的代理方法必須遵守UIDocumentInteractionControllerDelegate協議。
2.UIDocumentInteractionController屬性必須使用retain或strong修飾,控制器必須持有該對象。
3.代碼中的兩個路徑都可以使用。
4.彈出面板的方法一個不展示可選操作,一個展示可選操作。
5.直接使用presentPreviewAnimated:方法彈出預覽。
6.結合代理方法documentInteractionControllerViewControllerForPreview:顯示預覽操作。


直接預覽檔案還有一個方式:QuickLook,使用方式如下:
1.向項目匯入QuickLook.framework。
2.在需要的地方包含標頭檔#import <QuickLook/QuickLook.h>
3.聲明預覽控制器

@property (nonatomic, strong) QLPreviewController *preViewController;
4.遵守協議和資料來源QLPreviewControllerDelegate, QLPreviewControllerDataSource

核心代碼:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {    // 建立預覽控制器    self.preView = [[QLPreviewController alloc] init];    // 設定代理和資料來源    self.preView.delegate = self;    self.preView.dataSource = self;        [self.preView setCurrentPreviewItemIndex:0];    [self presentViewController:self.preView animated:YES completion:nil];    }#pragma mark QLPreviewControllerDataSource- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {    return 1;}- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{    NSString *docu = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    NSString *filePath = [docu stringByAppendingPathComponent:@"004.png"];    NSURL *url = [NSURL fileURLWithPath:filePath];        return url;    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.