作者: andy. 时间: 2020-01-13 22:06:18
上次更新版本前遇到一个问题,在IOS 13上面,使用系统输入法输入中文(带候选词的语言都会,下同),无法完成输入。因为发版本前一天发现的,来不及修复,同样因为发的海外,所以就没着急修复,等这次发版本(整包更新,非热更)才修复。感觉这个问题挺有意思的,所以记录下来。先说修改方法,这个有多种修改方法,这里说一种,这种是ccui.TextField can't input multistage text (like chinese) in ios 13 beta7(1)提到的,这个参考了CCEAGLView:setMarkedText problem in iOS13(2)这个里面的方法。选了1,没有选2的原因是因为2中UIGestureRecognizer移除了,但是移除后下次又会创建,反复的话对性能还是有一定影响,所以选用了第二种方法。具体修改如下:
1、先修改CCEAGLView-ios.mm里面的两个方法textInRange和markedTextRange,修改为:
- (NSString *)textInRange:(UITextRange *)range { CCLOG("textInRange"); if (nil != markedText_) { return markedText_; } return @""; } - (UITextRange *)markedTextRange { CCLOG("markedTextRange"); if (nil != markedText_) { return [[[UITextRange alloc] init] autorelease]; } return nil; // Nil if no marked text. }
2、重写gestureRecognizerShouldBegin方法,直接方法NO:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer API_AVAILABLE(ios(6.0)) { gestureRecognizer.delaysTouchesBegan = NO; gestureRecognizer.delaysTouchesEnded = NO; return NO; }
3、最后将所有的手势的Delay都改为NO:
for (UIGestureRecognizer * gesture in [self gestureRecognizers]) { gesture.delaysTouchesBegan = NO; gesture.delaysTouchesEnded = NO; }
这个方案的原因在上面的的连接里面,wulv1985已经描述了。
这里有个有意思的地方:
重写方法的时候,我开始没有加API_AVAILABLE(ios(6.0)),没有调用,把我郁闷惨了,想了好久没想通。也是Objective-C开发的功底不够。