当前位置: 首页 > news >正文

不错的网站建设/合肥百度快速排名优化

不错的网站建设,合肥百度快速排名优化,什么是o2o电商模式,做微网站的第三方登录界面近日有用户报 app 调用中文手写输入法时出现闪退。问题描述可以参照网上: http://blog.csdn.net/yuanpengs/article/details/47616655http://www.jianshu.com/p/b641bcdb0fab 笔者的这个 App 中也是一样,使用了 UITouch 分类重写了 ScrollView 的 touc…

近日有用户报 app 调用中文手写输入法时出现闪退。问题描述可以参照网上:

  • http://blog.csdn.net/yuanpengs/article/details/47616655
  • http://www.jianshu.com/p/b641bcdb0fab

笔者的这个 App 中也是一样,使用了 +UITouch 分类重写了 ScrollView 的 touchesXXX 方法。
网上提到的解决办法都是千篇一律,即不要重写 ScrollView 的 touchesXXX 方法。但这个 app 中这是不可能的,因为笔者有一个自定义控件必须要让 scrollView 响应点击事件。

经过调试发现,这个崩溃是因为中文输入法中一个私有类 UIKBCandidateCollectionView(即显示候选词条的 bar)也是一个 UIScrollView ):

(lldb) cpo self
<UIKBCandidateCollectionView: 0x1040b5c00; frame = (0 0; 369 38); clipsToBounds = YES; opaque = NO; autoresize = LM+H; gestureRecognizers = <NSArray: 0x17424b4c0>; layer = <CALayer: 0x170225ac0>; contentOffset: {0, 0}; contentSize: {1003, 38}> collection view layout: <UICollectionViewFlowLayout: 0x103d4f090>(lldb) cpo [self superclass]
UICollectionView(lldb) cpo [[self superclass] superclass]
UIScrollView

而这个类的 nextResponder 是一个 UIKBHandwritingCandidateView:

(lldb) cpo [self nextResponder]
<UIKBHandwritingCandidateView: 0x10032ef90; frame = (0 0; 369 38); opaque = NO; layer = <CALayer: 0x170236dc0>>

而当 UIKBCandidateCollectionView 调用 nextResponder 的 touchesBegan:withEvent: 方法时就会 crash。

具体机制未细究,估计是 iOS 的 bug(有时间提给苹果吧)。于是解决办法就是修改 +UITouch 分类,在向 nextResponder 传递触摸事件之前做一个判断,发现是 UIKBCandidateCollectionView 类就不传递触摸事件:

#import "UIScrollView+UITouch.h"
#import <objc/runtime.h>@implementation UIScrollView(UITouch)-(NSString* )getClassName{return NSStringFromClass([self class]);
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {if(![[self getClassName] hasPrefix:@"UIKB"]){[[self nextResponder] touchesBegan:touches withEvent:event];}[super touchesBegan:touches withEvent:event];
}-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {if(![[self getClassName] hasPrefix:@"UIKB"]){[[self nextResponder] touchesMoved:touches withEvent:event];}[super touchesMoved:touches withEvent:event];
}- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {if(![[self getClassName] hasPrefix:@"UIKB"]){[[self nextResponder] touchesEnded:touches withEvent:event];}[super touchesEnded:touches withEvent:event];
}@end

注意:Category 分类哪怕是不用导入头文件也会自动失效,这和普通类不一样(普通的类不导入头文件是不会加载的)。只不过如果你不导入分类的头文件的话,你无法在源代码中调用其扩展和覆盖的方法。但 +UITouch 这个分类不同,它的所有 touchesXXX 方法是触摸发生时自动调用的,不需要你在源代码中手动调用。

其实我们可以有另一种更好的选择,即继承 UIScrollView 子类,然后在子类中覆盖 touchesXXX 方法,从而避免在 Category 中使用私有 API,因为 UIKBCandidateCollectionView 类是苹果私有类,不能保证将来它还叫这个名字。

http://www.lbrq.cn/news/1043479.html

相关文章:

  • 冠县网站开发/seo如何优化
  • 群晖 wordpress 迁移/新站优化案例
  • 收到网站建设账务处理/个人如何加入百度推广
  • 网站当前位置怎么做/做网站seo推广公司
  • 网站显示系统建设中/seo自然搜索优化排名
  • sketch代替ps做网站/开封网站seo
  • 揭阳模板网站建站/如何注册属于自己的网站
  • 微信小程序制作宣传图册/简述seo的概念
  • 展示型网站制作公司/排名优化哪家专业
  • 用bootstrap3做的网站/龙岗网络公司
  • wordpress 整合php/临安网站seo
  • 网站制作机构/排名软件
  • 乌鲁木齐在线/搜索引擎优化的基本手段
  • wordpress站点前台请求数过多/互联网营销公司
  • 给企业做网站如何定价/江西网络推广seo
  • 自适应产品网站模板/网站建设明细报价表
  • 湖北专业网站建设维修电话/百度大全免费下载
  • 做网站不难吧/东莞市优速网络科技有限公司
  • 杭州网站建设前三/网站维护合同
  • 品牌营销策略有哪些/外贸网站优化
  • 系部网站开发项目的目的/猪八戒网接单平台
  • wordpress站点安装/怎么拿到百度推广的代理
  • 博罗做网站技术/百度上做推广怎么收费
  • 网站软文设计/社区推广
  • 用帝国做的网站/360优化大师旧版本
  • 做新浪微博网站需要/抖音关键词搜索排名
  • 广州汽车网站建设/做百度推广的网络公司
  • 浙江建设职业技术学院oa网站/培训心得体会范文500字
  • 深圳设计装修公司/网站seo排名优化
  • 用http做网站隐藏端口/seo是什么工作
  • 【运维进阶】WEB 服务器
  • 【代码随想录day 17】 力扣 617.合并二叉树
  • Python day40
  • 《算法导论》第 16 章 - 贪心算法
  • 动态规划(三维)直接按照题目条件
  • 【Python 高频 API 速学 ⑦ · 完结篇】