相关链接
- iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
- 【iOS功能实现】之利用UIDocumentInteractionController打开和预览文档
- iOS Document Interaction 编程指南
创建过程
1. 首先在plist文件中进行设置,加入 UIFileSharingEnabled
使项目能够实现ituns共享功能
2. 引入QuickLook框架 #import <QuickLook/QuickLook.h>
其中引入头#improt <string.h>
为的使用 strlen(txt) 来计算char长度
3. 创建tableView,用来承载从共享文件夹中获取的文件列表名
4. 导入各种代理方法
<UITableViewDelegate,UITableViewDataSource,QLPreviewControllerDelegate,QLPreviewControllerDataSource,UIDocumentInteractionControllerDelegate>
5. 书写沙盒文件相关的处理方法
#pragma mark **************** 沙盒中文件相关处理 begin ****************
#pragma mark 保存图片的本地方法
- (void)saveToDocumentsWithImage:(UIImage *)image andImageName:(NSString *)imageName {
NSData *imageData = UIImageJPEGRepresentation(image, 0.8); // 转换类型
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSString *filePath = [documentPath stringByAppendingPathComponent:imageName];
[imageData writeToFile:filePath atomically:YES]; // 将数据写书沙盒
}
#pragma mark 保存文字相关内容
- (void)saveToDocumentsWithTxT:(char *)txt andTxtFileName:(NSString *)txtFileName {
NSData *txtData = [[NSData alloc] initWithBytes:txt length:strlen(txt)];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSString *filePath = [documentPath stringByAppendingPathComponent:txtFileName];
[txtData writeToFile:filePath atomically:YES];
}
#pragma mark 直接获取ituns文件夹中列表
- (NSArray *)getFileListFromDocument {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSError *error = nil;
NSArray *fileList = [NSArray array];
fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentPath error:&error]; // 获取内容
return fileList;
}
#pragma mark 获取沙盒中文件路径url
- (NSURL *)getFileUrlOfDocumentsWithIndex:(NSInteger)index {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSArray *fileList = [self getFileListFromDocument];
NSString *path = [documentPath stringByAppendingPathComponent:[fileList objectAtIndex:index]];
return [NSURL fileURLWithPath:path];
}
#pragma mark **************** 沙盒中文件相关处理 end ****************
6. 根据方法获取进行相关数据的添加
1> 获取列表信息
self.dirArray = [self getFileListFromDocument]; // 获取沙盒文件列表名字
[self.readTableView reloadData];
2> 在cellForRow里边设置各种数据,即可显示列表
#pragma mark cellForRow方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.textLabel.text = [self.dirArray objectAtIndex:indexPath.row];
NSURL *fileURL = [self getFileUrlOfDocumentsWithIndex:indexPath.row];
// 根据fileURL创建DocumentController
[self setupDocumentControllerWithURL:fileURL];
// 获取页面中的icons
NSInteger iconCount = [self.documentInteractionController.icons count];
if (iconCount > 0) {
// 将icon作为cell上的图片
cell.imageView.image = [self.documentInteractionController.icons objectAtIndex:iconCount-1];
}
// 设置选择时的状态
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
// 设置cell背景色为透明色
cell.backgroundColor = [UIColor clearColor];
return cell;
}
7. 创建QLPreviewController部分东西
#pragma mark 添加点击cell的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
previewController.delegate = self;
previewController.currentPreviewItemIndex = indexPath.row;
[self.navigationController pushViewController:previewController animated:YES];
//点击以后直接恢复正常状态
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark **************** previewController方法/代理方法部分 begin ****************
- (void)setupDocumentControllerWithURL:(NSURL *)url {
if (self.documentInteractionController == nil) {
self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
self.documentInteractionController.delegate = self;
} else {
self.documentInteractionController.URL = url;
}
}
#pragma mark 设置previewController中item的个数
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
return 1;
}
#pragma mark 从previewController页面返回时的代理方法
- (void)previewControllerDidDismiss:(QLPreviewController *)controller {
// 可以处理返回的数据
}
#pragma mark 点击previewItem是点击获取内容相关信息
- (id)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
NSIndexPath *selectIndexPath = [self.readTableView indexPathForSelectedRow];
NSURL *fileURL = [self getFileUrlOfDocumentsWithIndex:selectIndexPath.row];
return fileURL;
}
#pragma mark **************** previewController方法/代理方法部分 end ****************
全部代码
//
// ViewController.m
// ituns共享文件练习
//
// Created by 赵宏亚 on 16/8/31.
// Copyright © 2016年 赵宏亚. All rights reserved.
//
#import "ViewController.h"
#import <string.h>
#import <QuickLook/QuickLook.h>
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource,QLPreviewControllerDelegate,QLPreviewControllerDataSource,UIDocumentInteractionControllerDelegate>
@property (weak, nonatomic) IBOutlet UITableView *readTableView; //用于显示共享文件夹中文件
@property (nonatomic,strong) UIDocumentInteractionController *documentInteractionController; // 系统沙盒文件交互VC
@property (nonatomic,strong) NSArray *dirArray; //存储路径名称
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.dirArray = [self getFileListFromDocument]; // 获取沙盒文件列表名字
NSLog(@"self.dirArray ===== %@",self.dirArray);
self.readTableView.delegate = self;
self.readTableView.dataSource = self;
// 设置tableView背景色为透明色
self.readTableView.backgroundColor = [UIColor clearColor];
// 分割线样式
// self.tabelView.separatorStyle = UITableViewCellSeparatorStyleNone;
//去掉空白cell
self.readTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
[self.readTableView reloadData];
}
#pragma mark **************** tableView代理 begin ****************
#pragma mark 设置每行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 60;
}
#pragma mark 设置section的个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
#pragma mark 设置每个section的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
return self.dirArray.count;
}
#pragma mark cellForRow方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.textLabel.text = [self.dirArray objectAtIndex:indexPath.row];
NSURL *fileURL = [self getFileUrlOfDocumentsWithIndex:indexPath.row];
// 根据fileURL创建DocumentController
[self setupDocumentControllerWithURL:fileURL];
// 获取页面中的icons
NSInteger iconCount = [self.documentInteractionController.icons count];
if (iconCount > 0) {
// 将icon作为cell上的图片
cell.imageView.image = [self.documentInteractionController.icons objectAtIndex:iconCount-1];
}
// 设置选择时的状态
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
// 设置cell背景色为透明色
cell.backgroundColor = [UIColor clearColor];
return cell;
}
#pragma mark 添加点击cell的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
QLPreviewController *previewController = [[QLPreviewController alloc] init];
previewController.dataSource = self;
previewController.delegate = self;
previewController.currentPreviewItemIndex = indexPath.row;
[self.navigationController pushViewController:previewController animated:YES];
//点击以后直接恢复正常状态
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark **************** tableView代理 end ****************
#pragma mark **************** previewController方法/代理方法部分 begin ****************
- (void)setupDocumentControllerWithURL:(NSURL *)url {
if (self.documentInteractionController == nil) {
self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
self.documentInteractionController.delegate = self;
} else {
self.documentInteractionController.URL = url;
}
}
#pragma mark 设置previewController中item的个数
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
return 1;
}
#pragma mark 从previewController页面返回时的代理方法
- (void)previewControllerDidDismiss:(QLPreviewController *)controller {
// 可以处理返回的数据
}
#pragma mark 点击previewItem是点击获取内容相关信息
- (id)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
NSIndexPath *selectIndexPath = [self.readTableView indexPathForSelectedRow];
NSURL *fileURL = [self getFileUrlOfDocumentsWithIndex:selectIndexPath.row];
return fileURL;
}
#pragma mark **************** previewController方法/代理方法部分 end ****************
#pragma mark **************** 沙盒中文件相关处理 begin ****************
#pragma mark 保存图片的本地方法
- (void)saveToDocumentsWithImage:(UIImage *)image andImageName:(NSString *)imageName {
NSData *imageData = UIImageJPEGRepresentation(image, 0.8); // 转换类型
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSString *filePath = [documentPath stringByAppendingPathComponent:imageName];
[imageData writeToFile:filePath atomically:YES]; // 将数据写书沙盒
}
#pragma mark 保存文字相关内容
- (void)saveToDocumentsWithTxT:(char *)txt andTxtFileName:(NSString *)txtFileName {
NSData *txtData = [[NSData alloc] initWithBytes:txt length:strlen(txt)];
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSString *filePath = [documentPath stringByAppendingPathComponent:txtFileName];
[txtData writeToFile:filePath atomically:YES];
}
#pragma mark 直接获取ituns文件夹中列表
- (NSArray *)getFileListFromDocument {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSError *error = nil;
NSArray *fileList = [NSArray array];
fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentPath error:&error]; // 获取内容
return fileList;
}
#pragma mark 获取沙盒中文件路径url
- (NSURL *)getFileUrlOfDocumentsWithIndex:(NSInteger)index {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; // 获取沙盒路径
NSArray *fileList = [self getFileListFromDocument];
NSString *path = [documentPath stringByAppendingPathComponent:[fileList objectAtIndex:index]];
return [NSURL fileURLWithPath:path];
}
#pragma mark **************** 沙盒中文件相关处理 end ****************
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end