• iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)


    到今天实现功能, 由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
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    smtp同时发送多个邮箱
    python中smtp的账号和密码设置
    自动化测试中将文件输入到指定的文件夹
    eclipse目录中不显示输出的文件的解决办法
    运行程序提示 “ find_element () argument after * must be an iterable, not method”
    用在浏览器复制的xpath无法定位元素
    eclipse中folder、source folder
    Wampserver部署thinksns
    隐藏文件夹
    wampserver图标显示橙色或是红色的解决办法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4651282.html
Copyright © 2020-2023  润新知