IOS QLPreviewController的简单使用及如何隐藏toolbar上的Action按钮
来源:互联网 发布:2017淘宝注册用户数量 编辑:程序博客网 时间:2024/06/11 12:12
在iOS的开发程序上,有许多可以进行本地阅读PDF、Word文档等的文件,如:QLPreviewController、UIWebView和用CGContext上画的PDF文档,并结合UIPageViewController展示,再加上网上的一些三方框架,其实有许多的浏览文档的方式,今天就主要讲讲QLPreviewController。
QLPreviewController的简单使用
QLPreviewController是基于QuickLook.framework框架下的。
在Build Phases->Link Binary Libraries中添加QuickLook.framework。
接着在你需要进行阅读的地方进行导入#import <QuickLook/QuickLook.h>
就行了。因为这个是系统自带的框架,所以用尖括号导入。
要学会使用QLPreviewController,就必须了解一下它的QLPreviewControllerDelegate
和QLPreviewControllerDataSource
。
QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller;
这个方法是用于返回阅读的文档数量
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index;
这个方法是用于返回文档的路径或文档的名字,这样,就不得不说一下QLPreviewItem
,这个是一个继承于NSObject
的类,它没有创建的方法,但是默认它为NSURL
或者NSString
的类型,但是要强调一点,这里的NSURL为文档的本地路径,而不是网络路径。
QLPreviewControllerDelegate
- (void)previewControllerWillDismiss:(QLPreviewController *)controller;
这个代理是在预览控制器关闭之前调用。
- (void)previewControllerDidDismiss:(QLPreviewController *)controller;
这个代理是在预览控制器关闭之后调用。
- (BOOL)previewController:(QLPreviewController *)controller shouldOpenURL:(NSURL *)url forPreviewItem:(id <QLPreviewItem>)item;
这个代理是在预览控制器即将预览时调用。默认返回YES,也就是允许访问。
- (CGRect)previewController:(QLPreviewController *)controller frameForPreviewItem:(id <QLPreviewItem>)item inSourceView:(UIView * _Nullable * __nonnull)view;
这个代理是预览时调用控制器是将全屏或开除全屏,提供放大的效果。返回的是变焦的起源,就是点击屏幕时,view所在的CGRect。
- (UIImage *)previewController:(QLPreviewController *)controller transitionImageForPreviewItem:(id <QLPreviewItem>)item contentRect:(CGRect *)contentRect;
预览时调用控制器是将全屏或开除全屏,缩放时提供一个平稳过渡。这个方法我暂时不知道有什么效果,也不清楚其作用,上面那句话也是我直接翻译的xcode上面的原文,有了解的朋友请在评论区告诉我一下,谢谢……
- (UIView* _Nullable)previewController:(QLPreviewController *)controller transitionViewForPreviewItem:(id <QLPreviewItem>)item NS_AVAILABLE_IOS(10_0);
预览时调用控制器是将全屏或开除全屏,缩放时提供一个平稳过渡。同上一个代理,谢谢……
实际使用
#import "ViewController.h"#import <QuickLook/QuickLook.h>@interface ViewController ()<QLPreviewControllerDelegate, QLPreviewControllerDataSource>@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; NSString *file = [[NSBundle mainBundle] pathForResource:@"iOS手册.pdf" ofType:nil]; NSURL *url = [NSURL fileURLWithPath:file]; if ([QLPreviewController canPreviewItem:url]) { QLPreviewController *qlpreVc = [[QLPreviewController alloc] init]; qlpreVc.delegate = self; qlpreVc.dataSource = self; [self presentViewController:qlpreVc animated:YES completion:nil]; }}#pragma mark -> QLPreviewControllerDataSource- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller { return 1;}- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { NSString *file = [[NSBundle mainBundle] pathForResource:@"iOS手册.pdf" ofType:nil]; NSURL *url = [NSURL fileURLWithPath:file]; return url;}
直接运行,发现PDF文档并没有展示出来。检查后,发现这个QLPreviewController
是基于UINavigationController
下的,所以将控制器上套层UINavigationController
就可以直接使用了,效果图如下:
正如我蓝色箭头指向的地方一样,这个是一个分享的Action,你能够看见它处在QLPreviewController
的Toolbar
上,但是你不论是从Toolbar
的subviews
上查找,还是使用其他的办法,这个蓝色小分享就伫立在那里。
并且,这个分享按钮的生命力及其的顽强,就算将Toolbar
隐藏了,它依然存在。那么,想要保证自己APP中的文件不被分享传送出去,就继续看下去吧。
QLPreviewController隐藏ToolBar
其实,我今天在网上找了许多的方法,但是方法都极其老了,而且根本不适用,于是我在朋友的提示下,另辟蹊径:并不需要将这个控制器弹出来,我只需要将这个页面加载到我当前控制器的页面上不就可以了。
于是,将上面那份代码中的viewDidLoad
稍微改一下就好了。
- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"iOS手册"; NSString *file = [[NSBundle mainBundle] pathForResource:@"iOS手册.pdf" ofType:nil]; NSURL *url = [NSURL fileURLWithPath:file]; if ([QLPreviewController canPreviewItem:url]) { QLPreviewController *qlpreVc = [[QLPreviewController alloc] init]; qlpreVc.delegate = self; qlpreVc.dataSource = self; [self addChildViewController:qlpreVc]; qlpreVc.view.frame = self.view.bounds; [self.view addSubview:qlpreVc.view]; }}
如果你现在觉得这个页面不好看,需要自己加功能按钮也可以了,完全自定义处理就好了。
OK,很久没有写了,今天就这样吧!
- IOS QLPreviewController的简单使用及如何隐藏toolbar上的Action按钮
- 如何隐藏 QLPreviewController 的 Action 按钮?
- 如何隐藏 QLPreviewController 的 Action 按钮?
- QLPreviewController的使用
- QLPreviewController 的使用
- QLPreviewController的使用
- 如何把多余的ToolBar上的按钮删除
- 【踩坑】如何获得Toolbar上原生的返回按钮
- ToolBar的简单使用
- Toolbar的简单使用
- Toolbar 的简单使用
- ToolBar的简单使用
- toolbar的简单使用
- Toolbar的简单使用
- Toolbar的简单使用
- 推荐一个有关自动隐藏ToolBar 上按钮 的小例子
- 如何通过程序触发按钮上的Action事件?
- ios WKWebview弹出键盘上的按钮隐藏
- Ubuntu 安装Clion
- TCP连接和关闭的过程
- 理解Batch Normalization
- 挑选出只依赖表的视图, 并得到相应的创建脚本
- OpenJudge百炼-2967-特殊日历计算-C语言-日期处理
- IOS QLPreviewController的简单使用及如何隐藏toolbar上的Action按钮
- java语言基础(89)——多线程(线程控制)
- android.hardware.camera2详解(实时更新,未完待续...)
- 建图spfa
- Apache与Tomcat有什么关系和区别
- assign的使用
- 关于这两天收集的知识点(未整理) -- JAVA 基础
- iOS 宏定义~ Device or Simulator (真机和模拟器)
- 9.9 优美三角剖分 2718