iOS 調(diào)用第三方文檔打開文件

背景:

????????我們的應用下載了一個文件低匙,并且需要展示這些文件旷痕,但是app本身不能打開的或者需要提供更多操作方式時,需要調(diào)用別的app來打開這個文件顽冶,在iOS 中提供了UIDocumentInteractionController和QLPreviewController來幫我們完成這件事欺抗。

? ??????UIDocumentInteractionController和QLPreviewController僅支持本地文件的預覽,不支持在線預覽强重,所以需要將其下載到本地后才可進行預覽绞呈。

?一团滥、UIDocumentInteractionController:

????1、UIDocumentInteractionController是一個強大的文檔閱讀器报强,主要功能如下:

????????1)預覽文檔灸姊,包括word文檔、excel文檔秉溉、pdf文檔等等

????????2)調(diào)用iPhone里第三方的app打開文檔

????????3)將文檔用系統(tǒng)級分享到各個應用中(包括QQ力惯、微信、郵箱等)

????????4)如果有條件配備支持AirPrint的打印機的話召嘶,就可以直接打印文檔

????2父晶、實現(xiàn)步驟:

????????1)要聲明一個變量!弄跌!不然后面會發(fā)生崩潰

@interface FileManager()<UIDocumentInteractionControllerDelegate>

@property (nonatomic , strong)UIViewController *viewController;

@property (nonatomic , strong)UIDocumentInteractionController *documentVC;

@end

????????2)在觸發(fā)預覽/共享的地方實現(xiàn)如下代碼:

????????????a.本應用內(nèi)預覽文檔

????self.documentVC = [UIDocumentInteractionController interactionControllerWithURL:fileUrl];

? ? //代理設置 -- 應用內(nèi)預覽必須要添加代理UIDocumentInteractionControllerDelegate

? ? self.documentVC.delegate =self;

? ? //當前app打開甲喝,需實現(xiàn)協(xié)議方法才可以完成預覽功能

? ? [_documentVC presentPreviewAnimated:YES];

????需要實現(xiàn)如下代理方法:

說明:UIDocumentInteractionController雖然它叫控制器,但是它不是真正意義上的控制器而是繼承自NSObject的铛只。所以這個地方需要返回給一個控制器用于展現(xiàn)documentController在其上面埠胖,所以我們就返回當前控制器self

#pragma mark-?UIDocumentInteractionControllerDelegate

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
????return self;

}

?????????????b.在其他應用中打開、分享

BOOL canOpen = [self.documentVC presentOpenInMenuFromRect:CGRectZero inView:_viewController.view animated:YES];

if(canOpen ==NO){

????UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"message:@"沒 有找到可以打開該文件的應用"delegate:nil cancelButtonTitle:@"確定"otherButtonTitles:nil, nil];

????[alert show];

}

????????無法打開時淳玩,彈窗告知直撤,不然用戶會感覺莫名其妙。在其他應用中打開蜕着、分享時谋竖,依然需事先其代理方法,再此就不列舉了承匣。

二蓖乘、QLPreviewController

????1、QLPreviewController的實現(xiàn)和UIDocumentInteractionController類似韧骗,但是QLPreviewController是真正的控制器嘉抒。兩者之間雖然實現(xiàn)效果相同,但是還是存在區(qū)別的:

????????1)QLPreviewController可以一起瀏覽多個文件宽闲,而UIDocumentInteractionController一次只能瀏覽一個文件众眨。

????????2)使用QLPreviewController之前握牧,需要導入QuickLook.framework(如下圖)容诬,并遵守其數(shù)據(jù)源和代理方法。

導入QuickLook.framework

????2沿腰、實現(xiàn)步驟:

NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"111.pdf" ofType: nil];

NSURL *url= [NSURL fileURLWithPath:urlStr];

if ([QLPreviewController canPreviewItem: (id<QLPreviewItem>)url]{

????QLPreviewController *qlVc = [[QLPreviewController alloc] init];

????qlVc.view.frame = CGRectMake(0,64,self.view.frame.size.width,self.view.frame.size.height-64)览徒;

????qlVc.delegate = self;

????qIVc.dataSource = self;

????qlVc.navigationController.navigationBar.userInteractionEnabled = YES;

????qlVc.view.userInteractionEnabled = YES;

????[self presentviewController:qlVc animated:YES completion:nil];

#pragma mark—QLPreviewController代理方法

- (NSInteger)numberOfPreviewItemsInPreviewController: (QLPreviewController *)controller{

????return 1;

}

-(id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index{

return self.fileurl;

}

預覽效果如下:

預覽效果
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颂龙,一起剝皮案震驚了整個濱河市习蓬,隨后出現(xiàn)的幾起案子纽什,更是在濱河造成了極大的恐慌,老刑警劉巖躲叼,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芦缰,死亡現(xiàn)場離奇詭異,居然都是意外死亡枫慷,警方通過查閱死者的電腦和手機让蕾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來或听,“玉大人探孝,你說我怎么就攤上這事∮桑” “怎么了顿颅?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長足丢。 經(jīng)常有香客問我粱腻,道長,這世上最難降的妖魔是什么斩跌? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任栖疑,我火速辦了婚禮,結(jié)果婚禮上滔驶,老公的妹妹穿的比我還像新娘遇革。我一直安慰自己,他們只是感情好揭糕,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布萝快。 她就那樣靜靜地躺著,像睡著了一般著角。 火紅的嫁衣襯著肌膚如雪揪漩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天吏口,我揣著相機與錄音奄容,去河邊找鬼。 笑死产徊,一個胖子當著我的面吹牛昂勒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟铜,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼戈盈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塘娶,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤归斤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刁岸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脏里,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年虹曙,在試婚紗的時候發(fā)現(xiàn)自己被綠了膝宁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡根吁,死狀恐怖员淫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情击敌,我是刑警寧澤介返,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站沃斤,受9級特大地震影響圣蝎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衡瓶,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一徘公、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哮针,春花似錦关面、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛮放,卻和暖如春缩抡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背包颁。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工瞻想, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娩嚼。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓蘑险,卻偏偏與公主長得像,于是被迫代替她去往敵國和親待锈。 傳聞我的和親對象是個殘疾皇子漠其,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容