iOS指南系列:使用QLPreviewController瀏覽文件
在iOS SDK包括了QLPreviewControllerAPI,元件允許使用者瀏覽許多不同的檔案型別,如XLS檔案,Word文件檔案,PDF檔案。約翰已建立了一個示例應用程式演示使用QLPreviewController。在示範中,您可以檢視幾個不同的檔案型別,甚至列印(使用無線印表機。)
隨著一個簡短的教程,我們解釋實施QLPreviewController的基礎步驟,你可以找到約翰的例子::::
對於過去的幾個月中,我一直花一些時間檢查出IOS快看檔案預覽 -接下來是一個短的應用程式,我寫著是為了更熟悉QLPreviewControllerAPI。
對於那些不熟悉的讀者可以這麼看,quick look
接下來在演示的程式中,我用了三個不同檔案型別,.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">