到今天實現功能, 由iTunes導入文件的應用程序, 並在此文檔進行編輯的應用。
就像我們平時經常使用 PDF閱讀這樣的事情, 們能夠自己導入我們的電子書。
源代碼下載:https://github.com/colin1994/iTunesTest.git
以下詳細介紹下實現過程。
先看效果圖。
圖1. 未實現功能前, iTunes截圖
圖2. 實現功能后, iTunes截圖
圖3. 實現功能后, 執行截圖。
好了, 通過圖片, 我們能夠看到實現的效果。
功能包括: 同意通過iTunes導入文件。
能夠查看沙盒下全部文件。
實現過程:
1。
在應用程序的Info.plist文件里加入UIFileSharingEnabled鍵,並將鍵值設置為YES。
2。詳細代碼:
ViewController.h
// // ViewController.h // iTunesTest // // Created by Colin on 14-6-8. // Copyright (c) 2014年 icephone. All rights reserved. // #import <UIKit/UIKit.h> //step1. 導入QuickLook庫和頭文件 #import <QuickLook/QuickLook.h> //step2. 繼承協議 @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,QLPreviewControllerDataSource,QLPreviewControllerDelegate,UIDocumentInteractionControllerDelegate> { //step3. 聲明顯示列表 IBOutlet UITableView *readTable; } //setp4. 聲明變量 //UIDocumentInteractionController : 一個文件交互控制器,提供應用程序管理與本地系統中的文件的用戶交互的支持 //dirArray : 存儲沙盒子里面的全部文件 @property(nonatomic,retain) NSMutableArray *dirArray; @property (nonatomic, strong) UIDocumentInteractionController *docInteractionController; @end
ViewController.m
// // ViewController.m // iTunesTest // // Created by Colin on 14-6-8. // Copyright (c) 2014年 icephone. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController @synthesize dirArray; @synthesize docInteractionController; - (void)viewDidLoad { [super viewDidLoad]; //step5. 保存一張圖片到設備document目錄中(為了測試方便) UIImage *image = [UIImage imageNamed:@"testPic.jpg"]; NSData *jpgData = UIImageJPEGRepresentation(image, 0.8); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory NSString *filePath = [documentsPath stringByAppendingPathComponent:@"testPic.jpg"]; //Add the file name [jpgData writeToFile:filePath atomically:YES]; //Write the file //step5. 保存一份txt文件到設備document目錄中(為了測試方便) char *saves = "Colin_csdn"; NSData *data = [[NSData alloc] initWithBytes:saves length:10]; filePath = [documentsPath stringByAppendingPathComponent:@"colin.txt"]; [data writeToFile:filePath atomically:YES]; //step6. 獲取沙盒里全部文件 NSFileManager *fileManager = [NSFileManager defaultManager]; //在這里獲取應用程序Documents目錄里的文件及目錄列表 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir = [documentPaths objectAtIndex:0]; NSError *error = nil; NSArray *fileList = [[NSArray alloc] init]; //fileList便是包括有該目錄下全部文件的文件名稱及目錄名的數組 fileList = [fileManager contentsOfDirectoryAtPath:documentDir error:&error]; self.dirArray = [[NSMutableArray alloc] init]; for (NSString *file in fileList) { [self.dirArray addObject:file]; } //step6. 刷新列表, 顯示數據 [readTable reloadData]; } //step7. 利用url路徑打開UIDocumentInteractionController - (void)setupDocumentControllerWithURL:(NSURL *)url { if (self.docInteractionController == nil) { self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url]; self.docInteractionController.delegate = self; } else { self.docInteractionController.URL = url; } } #pragma mark- 列表操作 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellName = @"CellName"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellName]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellName]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } NSURL *fileURL= nil; NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir = [documentPaths objectAtIndex:0]; NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:indexPath.row]]; fileURL = [NSURL fileURLWithPath:path]; [self setupDocumentControllerWithURL:fileURL]; cell.textLabel.text = [self.dirArray objectAtIndex:indexPath.row]; NSInteger iconCount = [self.docInteractionController.icons count]; if (iconCount > 0) { cell.imageView.image = [self.docInteractionController.icons objectAtIndex:iconCount - 1]; } return cell; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.dirArray count]; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { QLPreviewController *previewController = [[QLPreviewController alloc] init]; previewController.dataSource = self; previewController.delegate = self; // start previewing the document at the current section index previewController.currentPreviewItemIndex = indexPath.row; [[self navigationController] pushViewController:previewController animated:YES]; // [self presentViewController:previewController animated:YES completion:nil]; } #pragma mark - UIDocumentInteractionControllerDelegate - (NSString *)applicationDocumentsDirectory { return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; } - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)interactionController { return self; } #pragma mark - QLPreviewControllerDataSource // Returns the number of items that the preview controller should preview - (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController { return 1; } - (void)previewControllerDidDismiss:(QLPreviewController *)controller { // if the preview dismissed (done button touched), use this method to post-process previews } // returns the item that the preview controller should preview - (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx { NSURL *fileURL = nil; NSIndexPath *selectedIndexPath = [readTable indexPathForSelectedRow]; NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentDir = [documentPaths objectAtIndex:0]; NSString *path = [documentDir stringByAppendingPathComponent:[self.dirArray objectAtIndex:selectedIndexPath.row]]; fileURL = [NSURL fileURLWithPath:path]; return fileURL; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。