iOS系统预览文件但不分享的实用技巧 (iOS10, QLPreviewController)

苹果系统的文件预览能力对于很多app来说是必要的,但其提供的UI相关api并不是可以定制的,比如需要定制toolbar, navigationbar的情况,直接使用QLPreviewController或者

UIDocumentInteractionController 并不能达到想要的效果。

根据笔者的试验来看,现在 iOS10 QLPreviewController 和 UIDocumentInteractionController一样,都是直接在下面显示一个分享按钮,上面是标题栏。

如何对其UI进行定制呢?

QLPreviewController 作为一个正儿八经的viewcontroller,可以对其进行子类化操作,改变其行为,代码类似这样:

 (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
   
    self.navigationController.navigationBar.hidden = YES;
   
    self.navigationController.toolbar.hidden = YES;
  
    // custom view demonstrate
  UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
   topView.backgroundColor = [UIColor redColor];
 
    [self.view addSubview:topView];
}

为何在viewWillLayoutSubviews执行操作呢?

preview过程中可以点击全屏放大缩小,在这个过程中,你会发现此前所做的view操作被恢复了;这里的viewWillLayoutSubviews相当于是一个hook,可以让我们在view改变以后再把他置回来,达到我们想要的效果。

还有另外一种方案,只add  QLPreviewController的 view 作为subview,代码类似这样:

  MyPreviewViewController *qlVc = [[MyPreviewViewController alloc] init];
        qlVc.delegate = self;
        qlVc.dataSource = self;

    qlVc.view.frame = CGRectMake(0, 100, 300, 300);
    [self.view addSubview:qlVc.view];

对于该frame以外的部分则可以由我们来自由定制。

而UIDocumentInteractionController作为一个nsobject对象,产生的新UI要对其操纵所需要的手法可能更加tricky,这里笔者也没有做更多的实践,如果大家有好的思路也请分享给我,谢谢!

对于以前版本(iOS10以前)的QLPreviewController,分享按钮貌似是在右上角的,对其定制的方案讨论有很多,这里贴出链接供大家参考:

http://blog.csdn.net/jeffasd/article/details/49662483
https://stackoverflow.com/questions/6957091/qlpreviewcontroller-remove-or-add-uibarbuttonitems
http://www.jianshu.com/p/73048dbe6a7d

其思路主要是以下几种:

1. 子类化 ;  2. category, method swizz; 3. 只使用它的view

比我们上面的方案多了一种使用oc runtime的做法;oc中的runtime功能比较强大,有开发者想到这种解决方案也是正常的。

时间: 2024-10-26 04:36:52

iOS系统预览文件但不分享的实用技巧 (iOS10, QLPreviewController)的相关文章

FileUpload上传图片前实现图片预览功能(附演示动画)_实用技巧

看看效果:  在专案中,创建aspx页面,拉上FileUpload控件一个Image,将用来预览上传时的图片. 复制代码 代码如下: View Code <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html> <html xmln

百度云Android版打开预览文件方法分享

给各位百度云软件的用户们来详细的解析分享一下百度云Android版打开预览文件的方法. 方法分享: 通过百度云Android客户端可直接打开云端在线文件.只需点击相应的文件,便可以打开预览. 图片类型的文件可以直接打开预览;其他类型的文件将直接调用手机中第三方app进行打开,因此能预览的文件类型取决于手机上安装的第三方app.   好了,以上的信息就是小编给各位百度云的这一款软件的用户们带来的详细的百度云Android版打开预览文件的方法解析分享的全部内容了,各位看到这里的软件用户们,小编相信大

ios系统下删除文件的代码

  本文给大家总结了几则在IOS系统下删除文件的代码,十分的实用,有需要的小伙伴可以参考下. 方法一:这段objective c代码用于删除指定路径的文件 ? 1 2 3 if ([fileManager removeItemAtPath:@"FilePath" error:NULL]) { NSLog(@"Removed successfully"); } 方法二: ? 1 2 3 4 5 NSFileManager *defaultManager; defaul

windows 10手机系统预览版10051已知问题汇总

下面是win10手机系统预览版10051具体重要更新内容: 1• 斯巴达浏览器:本次加入斯巴达浏览器早期版本,是Modern移动应用,新的引擎,新的应用包括早期的阅读模式和阅读列表,斯巴达浏览器还不是默认的,并且与IE11共存. 2• 新的邮件和日历应用:Outlook Mail和Outlook Calendar取代之前的邮件.日历,都是Windows10通用应用.这些应用带来全新的UI设计,邮件和日历之间可以平滑切换,无需返回到开始屏幕.邮件自带手势功能,可以滑动删除.移动.标记.未标记. 3

ios系统下删除文件的代码_IOS

方法一:这段objective c代码用于删除指定路径的文件 if ([fileManager removeItemAtPath:@"FilePath" error:NULL]) { NSLog(@"Removed successfully"); } 方法二: NSFileManager *defaultManager; defaultManager = [NSFileManager defaultManager]; [defaultManager removeFi

在PC以及移动端设备上预览文件的问题

问题描述 目前系统是用FlexPaper来实现文件预览的,在PC上是没有问题的,请问用FlexPaper的话移动端设备上能否预览文件呢?如果不能,那有什么框架或者技术可以实现同一项目中PC以及移动端设备都能预览文件? 解决方案 解决方案二:怎么没人回复呢解决方案三:我也想知道

为我的 web os 开发的第一个应用web erp系统预览版,欢迎大家观摩指正!

问题描述 为我的webos开发的第一个应用weberp系统预览版,欢迎大家观摩指正!webos的开发而设计了一个崭新的开发框架,目标是快速开发各种web应用软件,目前尝试开发了第一个erp系统,欢迎大家观摩指正!webos将扩展集成各种已知和未知的应用,其中包括:各行业知识搜索引擎,erp,OA,进销存,财务,出纳管理,C2C,在线excel,在线word,博客,论坛,相册等免费服务为了这个目标我从头开始,完全自主设计了一个能快速开发这些应用的开发框架,下面的erp就是在我这个开发框架上开发出的

百度云管家如何打开预览文件?

  通过百度云Android客户端可直接打开云端在线文件.只需点击相应的文件,便可以打开预览. 图片类型的文件可以直接打开预览;其他类型的文件将直接调用手机中第三方app进行打开,因此能预览的文件类型取决于手机上安装的第三方app.

Windows8中使用“预览窗格”快速预览文件内容

  1.打开一个文件夹,点击菜单栏上的"查看".如下图所示: 2.选择"预览窗格",当选中文件时就可以在右侧看得到预览窗口.如下图所示: