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的字体颜色 ...
随机推荐
- js原生带缩略图的图片切换效果
js原生带缩略图的图片切换效果 本例中用到的 moveElement(elementID,final_x,final_y,interval)是来自<JavaScript DOM编程艺术(中文第二 ...
- bat中实现代码拷贝到指定目录后启动命令行并更改默认路径
### window书写shell脚本,实现判断指定文件是否存在,存在就删除,然后复制新文件到此目录 ``` if exist "G:\test\test2\1.txt" (d ...
- Mavn 使用介绍
1 Maven介绍 1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目 ...
- Ubuntu14.04下如何安装Python爬虫框架Scrapy
按照官方文档的说明,安装scrapy 需要以下程序或者库: (1).Python 2.7 (2).lxml. Most linux distributions ships PRepackaged ve ...
- 浅谈App原生开发、混合开发及HTML5开发的优劣
App混合开发(英文名:Hybrid App),是指在开发一款App产品的时候为了提高效率.节省成本即利用了原生的开发技术还应用了HTML5开发技术,是原生和HTML5技术的混合应用.目前App的开发 ...
- cookie的初识和运用(js和jq)
cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...
- 关于WEB-INF目录下无法访问webapp下的css等静态文件
第一种方法: <!-- 输出为项目根目录,即webapp--> <c:set value="${pageContext.request.contextPath}" ...
- Rabbit MQ config文件解析
Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...
- July 18th 2017 Week 29th Tuesday
My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...
- January 28 2017 Week 4 Saturday
Do what you say, say what you do. 做你说过的,说你能做的. Do more than what you say, and sometimes say more tha ...