iOS 手写输入法奔溃

2017-08-29  本文已影响143人  sll_

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

來源:简书

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

上一篇下一篇

猜你喜欢

热点阅读