原文来自: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有几个好处:

  1. 以简单高效的方式,进行进程间异步的通信
  2. OS系统来控制XPC进程的生命周期

简单的理解就是QLPreviewController就是单独一个进程,你的App通过操作系统来与之通信后,QLPreviewController怎么运行和你的App没有关系,由操作系统来控制。这样说来,添加的按钮一闪而过就说得过去了。XPC在Max OS系统上就有广泛的应用,这里就不多说了,有兴趣的自己研究。

下面说一下,iOS7下如何修改呢?使用QuickLook主要是想使用其文件浏览功能,如果不能用的话,那就只能使用webView来实现浏览文件的功能了。但是webview还是有很多不足之处:

  1. 文本文件的显示容易出现乱码
  2. 换行符有时不能正常的显示
  3. 大文件,如docx,exlc等文件显示的效率低

考虑再三,还是觉得需要慎用UIWebView,最好还是能使用QLPreviewController。考虑到之前之所以要继承QLPreviewController,也只是想“hack”系统,从而可以更改navigationItem。虽然调用的是子类,但实际运行的相当于是QLPreviewController。那如果新创建一个viewController A,然后把QLPreviewController的view作为一个子view添加到A的view上,是不是可以回避iOS7本身的一些特性呢?果然,经过尝试,这种方式可以解决遇到的问题。

虽然这种view的“组合”方式很山寨,但也不失为解决问题的一种方法,尤其在时间紧迫任务繁重的情况。如果有更好的方法来实现,希望大家共享下~

QLViewController在iOS7下的自定义的更多相关文章

  1. iOS7下滑动返回与ScrollView共存二三事

    [转载请注明出处] = =不是整篇复制就算注明出处了亲... iOS7下滑动返回与ScrollView共存二三事 [前情回顾] 去年的时候,写了这篇帖子iOS7滑动返回.文中提到,对于多页面结构的应用 ...

  2. 微信在IOS7下无法分享图片

    家里老大的iphone5在WWDC后第一时间升级了IOS7. 整体的UI风格和功能都很喜欢, 偶尔的crash还能接受. 但是最常用的软件之一微信,在IOS7下无法分享图片这点一直让她耿耿于怀. 从用 ...

  3. ios7下不能录音问题解决

    在ios6上运行非常正常的AVAudioRecoder组件,而跑到ios7上就不能工作了.通过google搜索在stackoverflow上的解决方法.http://stackoverflow.com ...

  4. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  5. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能

    Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...

  6. ios7下UISearchBar UITextField 光标不出现的问题

    app支持ios7,在UINavBar 里面加入搜索框,结果光标一直出现不了.在overstackflow网站搜索了一下,竟然有人遇到相同的问题.... 解决办法如下: searchBar.tintC ...

  7. CGBitmapContextCreate函数参数详解 以及在 ios7下变化

    函数原型: CGContextRef CGBitmapContextCreate ( void *data,    size_t width,    size_t height,    size_t ...

  8. iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误

    iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误: 下拉刷新之后,tableview的第一列会跑到导航栏的下面: 修正:添加如下代码 /** * 下拉刷新 增加一个: */ // ...

  9. iOS7下Status Bar字体颜色修改

    原文来自这里:iOS7下Status Bar字体颜色修改. 旧项目在iOS7上遇到status bar字体颜色需要修改的问题,症状如下:导航栏设置为黑色后,iphone上status bar的字体颜色 ...

随机推荐

  1. js原生带缩略图的图片切换效果

    js原生带缩略图的图片切换效果 本例中用到的 moveElement(elementID,final_x,final_y,interval)是来自<JavaScript DOM编程艺术(中文第二 ...

  2. bat中实现代码拷贝到指定目录后启动命令行并更改默认路径

      ### window书写shell脚本,实现判断指定文件是否存在,存在就删除,然后复制新文件到此目录 ``` if exist "G:\test\test2\1.txt" (d ...

  3. Mavn 使用介绍

      1 Maven介绍 1.1 项目开发中遇到的问题 1.都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 2.为什么在我的机器上可以正常打包,而配置管理员却打不出来? 3.项目 ...

  4. Ubuntu14.04下如何安装Python爬虫框架Scrapy

    按照官方文档的说明,安装scrapy 需要以下程序或者库: (1).Python 2.7 (2).lxml. Most linux distributions ships PRepackaged ve ...

  5. 浅谈App原生开发、混合开发及HTML5开发的优劣

    App混合开发(英文名:Hybrid App),是指在开发一款App产品的时候为了提高效率.节省成本即利用了原生的开发技术还应用了HTML5开发技术,是原生和HTML5技术的混合应用.目前App的开发 ...

  6. cookie的初识和运用(js和jq)

    cookie是什么 cookie是浏览器提供的一种机制,它将document 对象的cookie属性提供给JavaScript.可以由JavaScript对其进行控制,而并不是JavaScript本身 ...

  7. 关于WEB-INF目录下无法访问webapp下的css等静态文件

    第一种方法: <!-- 输出为项目根目录,即webapp--> <c:set value="${pageContext.request.contextPath}" ...

  8. Rabbit MQ config文件解析

    Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...

  9. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...

  10. 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 ...