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的字体颜色 ...
随机推荐
- 浮动的补充丶文本和字体属性丶background丶定位
一丶浮动的补充 浮动的特性: 1. 浮动的元素脱标 2.浮动的元素互相贴靠 3.浮动的元素有"字围"效果 4.浮动的元素有收缩的效果 前提是标准文档流,margin的垂直方向会出现 ...
- 理解Canvas原理
Canvas原理 Canvas我们把它翻译成画布,从字面意思我们就可以知道,不就是可以在上面画东西的布吗.好像很简单,没什么好说的.先看图: 从这几幅图我们可以看到以下几点: 1.每个小方格我们可以看 ...
- php接收post过来的json数据
<html> <head> <title>json</title> <script src="//cdn.bootcss.com/jqu ...
- bitekind
xrp这个人到SNT家坐在IOST的椅子上,喝着THETA. 武之巅峰,是孤独,是寂寞,是漫漫求索,是高处不胜寒 逆境中成长,绝地里求生,不屈不饶,才能堪破武之极道. 凌霄阁试炼弟子兼扫地 ...
- 从Microsoft SQL Server迁移到MySQL指南
转自 https://www.mysql.com/why-mysql/white-papers/sql-server-to-mysql-zh/ 由于 MySQL 将节约成本.自由选择平台.特性丰富等优 ...
- writing a javascript module ready for ES6 import
javascript模块化是一个比较大也是比较容易混淆的topic.通常几乎所有的第三方Library都支持CMD,AMD,ES6,Global object方式来引用lib所暴露出来的服务. 那么如 ...
- sourcemaps and persistent modification in chrome
在现代web开发中,往往我们会借助类似sass,less之类的预处理器来加快开发进度,但是随着项目的增大,你可能无法清楚明确地知道一个css rule到底是从哪个less/scss文件中编译出来的,这 ...
- Ngnix学习
- JavaWeb笔记——MVC设计模式和JavaWeb经典三层架
1 MVC设计模式 MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(C ...
- 【Leetcode】【Medium】Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...