1. 程式人生 > >iOS指南系列:使用QLPreviewController瀏覽文件

iOS指南系列:使用QLPreviewController瀏覽文件

在iOS SDK包括QLPreviewControllerAPI,元件允許使用者瀏覽許多不同的檔案型別XLS檔案Word文件檔案PDF檔案約翰建立了一個示例應用程式演示使用QLPreviewController。在示範中,您可以檢視幾個不同的檔案型別甚至列印使用無線印表機

隨著一個簡短的教程,我們解釋實施QLPreviewController的基礎步驟你可以找到約翰的例子::::

對於過去的幾個月我一直花一些時間檢查出IOS快看檔案預覽 -接下來是一個短應用程式,我寫著是為了更熟悉QLPreviewControllerAPI

對於那些熟悉讀者可以這麼看,quick look

是一個框架,它提供快速預覽一系列檔案型別 -支援檔案包括iWork文件微軟OfficeRTF格式PDF格式,影象,文字檔案以逗號分隔(CSV)檔案。

接下來在演示的程式中,我用了三個不同檔案型別,.xls/image/ms office /pdf

檔案預覽介面

為應用程式介面檔案如下所示,注意QL資料來源引用使用QLPreviewController必須實現此協議QLPreviewControllerDataSource。這裡的唯一例項變數一個數組,包涵每個被預覽檔案的檔案字符串UITableViewController用於顯示預覽檔案列表,通過navigation到下一個預覽介面

#import <QuickLook/QuickLook.h>
 
@interface TestViewController : UITableViewController <QLPreviewControllerDataSource>
{
  NSArray *arrayOfDocuments;
}
 
@end


本節將展示一個選擇適用於設立預覽程式碼建立表檢視和填充相同程式碼可以被視為Xcode專案可以從下面的連結下載(如果要學習tableview的使用,可以參考其它的指南)

初始化程式碼填入檔案陣列: 這樣檔名全在陣列了:

-(id)init
{
  if (self = [super init])
  {
    arrayOfDocuments = [[NSArray alloc] initWithObjects: 
        @"iOSDevTips.png
", @"Remodel.xls", @"Core J2ME Technology.pdf", nil]; } return self; }


下面的方法採用QLPreviewControllerDataSource協議時,必要的兩個之一此方法通知​​預覽控制器如何在預覽導航列表呈現多少個專案

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller 
{
  return [arrayOfDocuments count];
}

這種呢,算是question type的events,就是問 檔案從什麼地方來,NSURL

- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index 
{
  // Break the path into its components (filename and extension)
  NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];
 
  // Use the filename (index 0) and the extension (index 1) to get path
  NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];
//這個程式碼就體現了靈活性,你也可以寫成 ofType .pdf 
  return [NSURL fileURLWithPath:path];
}

專案中的其餘程式碼典型的iPhone/的iOS的東西建立應用程式委託委託UIWindow中新增一個子檢視導航控制器使視窗可見下面的委託程式碼在這裡你可以得到更大圖片檢視如何設定此應用程式的檢視控制器

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{   
  // Create and initialize the window
  window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
 
  // Create test view controller
  vc = [[TestViewController alloc] init];
 
  // Create navigation controller 
  nav = [[UINavigationController alloc] initWithRootViewController:vc];
 
  [window addSubview:[nav view]];  
  [window makeKeyAndVisible];
}

在選中特定行的時候,初始化QLPreviewController

/*---------------------------------------------------------------------------
*  
*--------------------------------------------------------------------------*/
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
	// When user taps a row, create the preview controller
	QLPreviewController *previewer = [[[QLPreviewController alloc] init] autorelease];

	// Set data source
	[previewer setDataSource:self];
  
  // Which item to preview
	[previewer setCurrentPreviewItemIndex:indexPath.row];

	// Push new viewcontroller, previewing the document
	[[self navigationController] pushViewController:previewer animated:YES];
}

值得一提的預覽控制器工作你有兩種不同的選擇首先,可以推到使用一個UINavigationController物件你可以看到預覽控制器物件我做了什麼預覽我的應用程式生命TestViewController這個物件控制器設定為導航控制器根檢視控制器

第二種方法來顯示預覽控制器模態使用方法presentModalViewController。  //這個和我上篇fastpdfkit的講法是一致的:

#pragma mark -
#pragma mark QLPreviewControllerDataSource

// Returns the number of items that the preview controller should preview
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController
{
    return 5; //30//you can increase/decrease the this
}

// returns the item that the preview controller should preview
- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
    return fileURL;
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
以上就是QLPreviewController的一些delegate,首先是預覽頁面數目,其次是我需要的URL(NSURL),最後是這個view的支援rotation程度。



 首先雙tap,然後拖動,出現context view,然後選擇功能,copy/define(dictionary)。

====補充:

問題:如何刪除那個print button

I answered an almost identical question the other day here. The question pertained to removing the print button, which isn't too hard. One thing to note about QLPreviewController is that it's not meant to be customized. I have built a subclass ofQLPreviewController that can be customized. I've put it here on Github. It's designed to easily remove the action button, among other features too. It wouldn't take much effort at all to replace the button with a custom one.

The biggest thing to watch out for is that the action button is re-added to the navigation bar anytime a new document is displayed. You should notice this in my code. AnytimeRBFilePreviewer removes the action button, you just need to re-add your custom buttons. To add your custom buttons, you should create aUIBarButtonItem that holds a custom view with four buttons in it. Then set the right bar button item as the customUIBarButtonItem you created.

Update:

I've updated RBFilePreviewer to allow you to set a custom right bar button item right out-of-the-box. Just call-setRightBarButtonItem: on RBFilePreviewer and it just works.

RBFilePreviewer is a subclass of QLPreviewController. It is intended to make it easy to preview anyQLPreviewItem. All you need to do is pass it the desired item(s) to preview to the appropriate initializer. You may use the providedRBFile class or any other class that conforms to QLPreviewItem (includingNSURL).


hint:smples/SmoothDocumentLoaderProject
 

相關推薦

iOS指南系列使用QLPreviewController瀏覽

在iOS SDK包括了QLPreviewControllerAPI,元件允許使用者瀏覽許多不同的檔案型別,如XLS檔案,Word文件檔案,PDF檔案。約翰已建立了一個示例應用程式演示使用QLPreviewController。在示範中,您可以檢視幾個不同的檔案型別,甚至列印

iOS指南系列如何解決奔潰問題-關於記憶體訪問續

Push the Button 現在的應用程式工程 - 或者至少是沒有問題的開始 - ,點選該按鈕執行。 Woah! 程式又崩潰了 SIGABRT ,還在 main.m.  在除錯窗格中的錯誤訊息是: Problems[6579:f803] -[MainVi

Android開發系列(十七)讀取assets夾下的數據庫

pack 取數 code ada tracking 編寫 數據庫 sdn where 在做Android應用的時候,不可避免要用到數據庫。可是當我們把應用的apk部署到真機上的時候,已經創建好的數據庫及其裏邊的數據是不能隨著apk一起安裝到真機上的。 (PS:這篇

jdk 1.7系列 (二) I/O 的基石 Path

.com 隨心所欲 println prefix logs filesyste args 工具類 功能 在NIO.2的文件 I/O 中,Path是必須掌握的關鍵類之一。Path通常代表文件系統中的位置,比如 C:\Windows\System32 什麽是根目錄、絕對路

【教程】Spire.Doc系列教程(1)給Word設定背景顏色和背景圖片

使用Spire.Doc,開發人員可以非常方便地給Word文件設定背景顏色和新增背景圖片。以下示例將詳細講述如何使用Spire.Doc給一個現有Word文件設定純色背景顏色,漸變背景顏色以及新增背景圖片。 設定背景顏色 設定純色背景顏色 //建立Document例項 Document doc

指令篇連接(軟連接和硬鏈接)___ ln

win window 查看 一個 windows 連接 磁盤 方式 影響 軟連接:相當於Windows裏面的快捷方式,刪除了原文件之後,會影響連接文件。軟連接可以在磁盤上面跨分區   把文件aa 軟連接到文件aa1,軟連接之後查看改文件,裏面有一個箭頭:aa1 —>

【U1結業機試題】新聞內容管理系統解析XML讀取Html模版生成網頁

repl att not 一個 class 新的 create hashmap exception 一、作業要求: 1.在xml文件中創建新聞節點news,包含標題、作者、日期、正文等信息 2.創建HTML模板文件 3.讀取xml中所有新聞信息,並使用新聞信息替換模板文件中

VELT-0.1.6開發載入根系統

baidu 轉載 裏的 python lin ide arch 包含 -s 快樂蝦http://blog.csdn.net/lights_joy/(QQ群:Visual EmbedLinux Tools 375515651)歡迎轉載,但請保留作者信息VELT的全稱是Vis

操作系統(筆試系列)-第八講系統

images com logs .com 分享 image ima .cn log 操作系統(筆試系列)-第八講文件系統

iOS開發-47】怎樣下載iOS 7.1 Simulator 以及iOS 8離線的Documentation這些

hang http 下載 資料 zhang 目錄 ios 8 log targe (1)最官方的解決的方法 在Xcode6裏面提供下載。依照下圖找到下載就可以。一般建議把以下的自己主動檢查更新和下載的框框勾起來,這樣它會幫我們自己主動下載。 問題

Java學習(4)統計一個中的英文,中文,數字,其他字符以及字符總數

port let args str reader 文件路徑 要求 cnblogs pub 要求:統計一個文件中的英文,中文,數字,其他字符以及字符總數(此隨筆以txt文件為例) import java.io.BufferedReader; import java.io.F

iOS發布證書和描述申請

需要 如果 蘋果 idt onload 證書 afa store 下載 iOS發布證書 用於發布到App Store,只有用iOS發布證書打包的IPA才能上架到蘋果應用市場。 如果要真機調試請看發布iOS調試證書的創建教程。 iOS真機調試介紹 一、創建iOS發布證書 i

第四課通過配置獲取對象(Spring框架中的IOC和DI的底層就是基於這樣的機制)

ted const dex generate stat clas name 必須 nbsp 首先在D盤創建一個文件hero.txt,內容為:com.hero.Hero(此處必須是Hero的完整路徑) 接下來是Hero類 package com.hero; publi

在java中RandomAccessFile類的作用對指定可以進行讀寫的操作

cnblogs 讀寫 acc com ces 作用 分享 進行 .com 在java中RandomAccessFile類的作用:對指定文件可以進行讀寫的操作

分發系統自動同步腳本

exp local nbsp blog rsync oca expect set txt [[email protected]/* */ ~]# cat 4.expect#!/usr/bin/expect set passwd "123456" spaw

分發系統構建簡易分發系統

list nbsp bsp 1.2 oot eof from end done 該腳本實現批量同步文件 [[email protected]/* */ ~]# cat rsync.expect #!/usr/bin/expect set passwd

php:file()與file_get_contents()講日誌沒行讀為數組形式

content ace 實現 不同的 函數 clas http replace contents file()與file_get_contents()一樣,都是讀取某文件的內容。file_get_contents()輸出的是整個文件(不能讀取TXT裏的首行縮進和換行符)。

Hbuilder開發app時生成ios要的mobileprovision和p12步驟.

。。 hbuilder p12 mob req mobile 右擊 文件下載 鑰匙 1.在MAC電腦.鑰匙串串訪問->證書助理->從證書頒發機構請求證書,創建一個證書為certSigningRequest文件 2.在Apple Developer中的Certi

Ansible中文指南筆記4 ansible配置

註釋 action 系統 def 方式 疊加 覆蓋 管理器 包管理器 Ansible的一些的設置可以通過配置文件完成.在大多數場景下默認的配置就能滿足大多數用戶的需求,在一些特殊場景下,用戶還是需要自行修改這些配置文件 用戶可以修改一下配置文件來修改設置,他們的被讀取的順序

功能二上傳功能的基本實現

tro enc 舉例 二進制 存儲 multipart file 瀏覽器 實現   使用表單實現文件上傳: <form action="upload_file.php" method="post" enctype="multipart/form-data">