美文网首页
iOS 手写输入法奔溃

iOS 手写输入法奔溃

作者: sll_ | 来源:发表于2017-08-29 08:18 被阅读143次

iOS 手写输入法奔溃,一种方法是常见的新建一个view监听点击手势,隐藏键盘,然后这个view最后加入到self.view要整屏宽高,

{  UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(keyboardHide:)];

//设置成NO表示当前控件响应后会传播到其他控件上,默认为YES。

tapGestureRecognizer.cancelsTouchesInView = NO;

//将触摸事件添加到当前view

[self.view addGestureRecognizer:tapGestureRecognizer];

}

- (void)keyboardHide:(UITapGestureRecognizer *)sender

{

[self.view endEditing:YES];

}

另外一种就是,判断一下是否是uiscrollview,看了网上一个帖子觉得挺好 http://www.jianshu.com/p/0e9cb4a8c3a0

UIScrollView 上如果有UITextField的话,结束编辑(退出键盘)直接用touchesBegan方法无效,需要再给UIScrollView加一个分类,重写几个方法。

网上已经有很多前辈给了相关代码是这样的(阅前提示:这样是有问题的!):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

[[self nextResponder] touchesBegan:touches withEvent:event];

[super touchesBegan:touches withEvent:event];

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

[[self nextResponder] touchesMoved:touches withEvent:event];

[super touchesMoved:touches withEvent:event];

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

[[self nextResponder] touchesEnded:touches withEvent:event];

[super touchesEnded:touches withEvent:event];

}

这样会有一个严重问题,就是使用手写输入法输入中文会导致崩溃(虽然使用手写输入法的人不多,但也不能无视他们)。被坑死,问题是百度出来尼玛80~90%全是这种解决方法。坑死人!

有一些前辈对于“UIScrollView点击空白处退出键盘”就提出了另一种解决方法:加一层view,给view一个点击事件,退出键盘。

但是我的项目中已经被前一种方法坑了,已经有用户反映手写崩溃,换第二种方法的话很麻烦,需要修改之后重新提交审核,不能及时解决,我需要及时的用JSPatch线上打补丁解决。调试了很久,我发现手写键盘在调用UIScrollView的这个分类的方法时,self的类型是UIKBCandidateCollectionView,一种系统没有暴露出来的类型,应该是UIScrollView的一个子类,所以解决办法就呼之欲出了,直接上代码。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

if (![self isMemberOfClass:[UIScrollView class]]) {

} else {

[[self nextResponder] touchesBegan:touches withEvent:event];

if ([super respondsToSelector:@selector(touchesBegan:withEvent:)]) {

[super touchesBegan:touches withEvent:event];

}

}

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

if (![self isMemberOfClass:[UIScrollView class]]) {

} else {

[[self nextResponder] touchesMoved:touches withEvent:event];

if ([super respondsToSelector:@selector(touchesBegan:withEvent:)]) {

[super touchesMoved:touches withEvent:event];

}

}

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

if (![self isMemberOfClass:[UIScrollView class]]) {

} else {

[[self nextResponder] touchesEnded:touches withEvent:event];

if ([super respondsToSelector:@selector(touchesBegan:withEvent:)]) {

[super touchesEnded:touches withEvent:event];

}

}

}

作者:vincent涵

链接:http://www.jianshu.com/p/0e9cb4a8c3a0

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • iOS 手写输入法奔溃

    iOS 手写输入法奔溃,一种方法是常见的新建一个view监听点击手势,隐藏键盘,然后这个view最后加入到self...

  • iOS奔溃日志分析

    iOS奔溃日志分析 前言(扯淡) iOS奔溃日志能够比较有效的分析奔溃的原因,方便我们debug我们的项目。当然现...

  • DYLD, Library not loaded: /usr/l

    奔溃日志 奔溃表现:iOS12.1 及以下启动奔溃奔溃日志: 解决方法:关闭bitcode,重新打包上传appst...

  • iOS自带手写键盘奔溃问题

    很多时候为了满足需求,我们需要在UIScrollView添加UITextField,在处理键盘升降键盘事件的时候往...

  • iOS13 textfield的placeholder字体颜色崩

    由于iOS13禁止了textfield通过KVC获取私有属性,出现奔溃问题 奔溃报错Access to UITex...

  • iOS收集Crash信息上报

    在iOS开发中,最严重的bug估计就是应用奔溃,如果应用奔溃了,除了做好挨骂的准备,还需要冷静的下来去处理这个事情...

  • iOS之奔溃记录

    实在是不知道该写点什么,就写下如何记录程序的Crash吧。 原理很简单,就是创建一个Crash的管理对象,然后记录...

  • iOS 9.x assets 导致的奔溃问题

    问题描述:上周新上传的版本在Bug收集中发现有几个地方出现很多次奔溃问题,问题都集中在iOS 9.x中奔溃机型分布...

  • iOS-千奇百怪的奔溃

    App 上线后,我们最怕的应该就是异常奔溃了。常见的奔溃类型分两种:信号可捕获奔溃、信号不可捕获奔溃,前者比较典型...

  • 奔溃

    送表弟们去上学的路上,听说刚才忘了拿《斗罗大陆》,却又接着说可以向同学借。我的内心立即奔溃了,满满的无力感! 当初...

网友评论

      本文标题:iOS 手写输入法奔溃

      本文链接:https://www.haomeiwen.com/subject/munndxtx.html