QLViewController在iOS7下的自定义
原文来自:QLViewController在iOS7下的自定义
原先的项目使用了quicklook framework,用于在iPhone上浏览各类文件,除了txt文本会有乱码的问题,其他文件的显示都非常正确。为了使得功能显得不那么单一,项目中继承了QLPreviewController,这样可以自定义添加navigationBar上的按钮,比如保存文件,编辑某些类型的文件等等。
这一切在iOS7发布前都正常运行,在iOS7上运行却出现了奇怪的现象:自定义添加的按钮不见了,只存在一个QLPreviewController提供的默认按钮。
于是debug,结果发现无论是在viewDidload或是viewDidAppear里添加按钮,最终都没有显示自定义的按钮。还好我在viewDidAppear里加了断点,然后可以依稀的看到导航栏上自定义的按钮出现了短暂的一会,紧接着就消失了。由此进行合理的推测,必定是QLPreviewController在iOS7上的行为有了重大变化。进行了google以后发现stackoverflow上有了端倪:
iOS 6 UIGestures (Tap) stops working with QLPreviewController
答案里提到了RemoteController的概念,具体的博文可以看答案中的链接(注意虽然文章中提到的是iOS6,但是我所遇到的问题只在iOS7上出现)。博文是以MailComposerViewController为例来介绍RemoteController(还有很多也是RemoteController,比如我遇到的QLPreviewController),主要提到的就是RemoteController是以XPC的方式运行。XPC有几个好处:
- 以简单高效的方式,进行进程间异步的通信
- OS系统来控制XPC进程的生命周期
简单的理解就是QLPreviewController就是单独一个进程,你的App通过操作系统来与之通信后,QLPreviewController怎么运行和你的App没有关系,由操作系统来控制。这样说来,添加的按钮一闪而过就说得过去了。XPC在Max OS系统上就有广泛的应用,这里就不多说了,有兴趣的自己研究。
下面说一下,iOS7下如何修改呢?使用QuickLook主要是想使用其文件浏览功能,如果不能用的话,那就只能使用webView来实现浏览文件的功能了。但是webview还是有很多不足之处:
- 文本文件的显示容易出现乱码
- 换行符有时不能正常的显示
- 大文件,如docx,exlc等文件显示的效率低
考虑再三,还是觉得需要慎用UIWebView,最好还是能使用QLPreviewController。考虑到之前之所以要继承QLPreviewController,也只是想“hack”系统,从而可以更改navigationItem。虽然调用的是子类,但实际运行的相当于是QLPreviewController。那如果新创建一个viewController A,然后把QLPreviewController的view作为一个子view添加到A的view上,是不是可以回避iOS7本身的一些特性呢?果然,经过尝试,这种方式可以解决遇到的问题。
虽然这种view的“组合”方式很山寨,但也不失为解决问题的一种方法,尤其在时间紧迫任务繁重的情况。如果有更好的方法来实现,希望大家共享下~
QLViewController在iOS7下的自定义的更多相关文章
- iOS7下滑动返回与ScrollView共存二三事
[转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...
- 微信在IOS7下无法分享图片
家里老大的iphone5在WWDC后第一时间升级了IOS7. 整体的UI风格和功能都很喜欢, 偶尔的crash还能接受. 但是最常用的软件之一微信,在IOS7下无法分享图片这点一直让她耿耿于怀. 从用 ...
- ios7下不能录音问题解决
在ios6上运行非常正常的AVAudioRecoder组件,而跑到ios7上就不能工作了.通过google搜索在stackoverflow上的解决方法.http://stackoverflow.com ...
- 【从零学习openCV】IOS7下的人脸检測
前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...
- Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能
Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...
- ios7下UISearchBar UITextField 光标不出现的问题
app支持ios7,在UINavBar 里面加入搜索框,结果光标一直出现不了.在overstackflow网站搜索了一下,竟然有人遇到相同的问题.... 解决办法如下: searchBar.tintC ...
- CGBitmapContextCreate函数参数详解 以及在 ios7下变化
函数原型: CGContextRef CGBitmapContextCreate ( void *data, size_t width, size_t height, size_t ...
- iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误
iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误: 下拉刷新之后,tableview的第一列会跑到导航栏的下面: 修正:添加如下代码 /** * 下拉刷新 增加一个: */ // ...
- iOS7下Status Bar字体颜色修改
原文来自这里:iOS7下Status Bar字体颜色修改. 旧项目在iOS7上遇到status bar字体颜色需要修改的问题,症状如下:导航栏设置为黑色后,iphone上status bar的字体颜色 ...
随机推荐
- Idea15 常用设置(一):JDK、SVN
1:显示行号 File->Settings->General->Appearance 2: 代码自动补齐即使是小写字母也会弹出代码补齐提示 3:自动编译 设置 4: 设 ...
- keras 联合训练
转自: https://blog.csdn.net/Yan_Joy/article/details/62235704
- Installing TensorFlow on Ubuntu
1.安装方法有4种,官方推荐是第一种. virtualenv(官方推荐) "native" pip Docker Anaconda 2.基于virtualenv的 ...
- javascript tips and snippets
如何给javascript对象动态创建动态key // ES2015 var key = 'DYNAMIC_KEY', obj = { [key]: 'ES6!' }; console.log(obj ...
- web项目开发流程
对于一个web项目,在实际编码之前,有一些通用的步骤来planning a website: 0.Defining the project (predr0->dr0) 对于外部项目,客户一般会发 ...
- web.xml配置错误页面,及输出错误信息
1.需要在web.xml中配置相关信息 <!-- 默认的错误处理页面 --> <error-page> <error-code>403</error-code ...
- WIN7与WIN10 安装
---恢复内容开始--- 开始的操作系统是黑白屏的DOS,随着光标的一闪一闪并逐渐后移,一条条指令输入电脑,并执行相关指令完成任务.慢慢的,视窗操作系统最初是基于DOS的windows 9X内核WIN ...
- np.arrange用法
np.arange()经常用,其用法总结如下: np.arange(0,60,2) 生成从0到60的步距为2的数组,其中0为初始值,60为终值,2步距, np.arange(60) 生成从0到59的默 ...
- LINUX基础了解
- linux 上部署tomcat的java web项目,会出现post提交request.request.getParameter()的得不到值的情况
有时候明明在windows上非常的正常,而在linux上就不正常了,在windows上post提交request.request.getParameter()有值,而在liunx上没有值. 我开始以为 ...