版本记录
版本号 | 时间 |
---|---|
V1.0 | 2020.03.21 星期六 |
前言
做了好几个APP,碰到了大大小小的很多坑,以前碰到坑,解决了就结束了,这里想把自己碰到的坑记录下来,一来给自己备查二来希望可以帮助到大家。感兴趣的可以关注下,也欢迎大家补充留言,感兴趣的看上面几篇文章。
1. 我的代码我的坑(一) —— 自签名证书导致请求取消的问题(一)
2. 我的代码我的坑(二) —— UIImageView动画点击后动画和图片消失的问题(一)
3. 我的代码我的坑(三) —— iOS9系统WKWebView加载页面白板的问题(一)
4. 我的代码我的坑(四) —— iOS12系统自定义渐变色UISwitch手机横屏的异常问题(一)
5. 我的代码我的坑(五) —— 不可编辑状态的UITextView文本高度大于视图高度默认滚动到底部的问题(一)
6. 我的代码我的坑(六) —— UITextField输入长度自动截取时汉字和拼音带来的末位截取不能正常输入汉字的问题(一)
7. 我的代码我的坑(七) —— UIImageView做序列帧动画结束后没有回调并且“隐藏”(一)
8. 我的代码我的坑(八) —— iOS 13.1.2 Debug调试模式系统layoutSubviews中修改frame循环调用导致的崩溃(一)
问题描述
这里是两个小的问题:
这里说明一下背景:
都是使用
UITextField
进行输入,并且根据产品需求要限制字数的长度,比如限制输入20个字就不允许再输入。
- 1) 系统键盘拼音全键无法正常联想。
这个问题,就是首先使用的下面的拼音全键盘。
大家可以看到douyin
,这个已经高亮了,下面的汉字抖音
什么的没有选择但是可以正常联想。
现在说一下就是由于一句代码导致了拼音全键这种系统键盘无法正常联想的问题。
[_amountNumberTextField addTarget:self action:@selector(textFieldEditChanged:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldEditChanged:(UITextField *)textField
{
textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
这行代码本来就是去除输入框两边的空格,但是却导致了输入框拼音全键无法正常联想。具体如下所示:
可以看见联想不出来了,而且没有了高亮。
- 2) 系统键盘输入汉字高亮区识别的问题。
这是另外一个问题,那就是高亮区的douyin
不应该计入统计字数。
问题解决
- 1) 去掉那行去除两端空格就好了,可以正常联想。
- 2)需要判断键盘类型,如果是汉字就找到高亮区,并计算非高亮区的文字长度。
具体上面两个问题,不多说直接看代码吧,很小的问题。
- (void)textFieldEditChanged:(UITextField *)textField
{
if (textField == self.noteInfoTextField) { //备注
NSString *lang = [[UIApplication sharedApplication] textInputMode].primaryLanguage; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
if (!position) {// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (textField.text.length > 20) {
[HJToastMgr showToast:@"最多只能输入20个字哦"];
textField.text = [textField.text substringToIndex:20];
}
}
else{// 有高亮选择的字符串,则暂不对文字进行统计和限制
}
}
else{// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
if (textField.text.length > 20) {
textField.text = [textField.text substringToIndex:20];
[HJToastMgr showToast:@"最多只能输入20个字哦"];
}
}
}
}
这样就既解决了系统拼音键盘无法正常联想以及高亮区并入计数的问题。
后记
本篇主要讲述了系统键盘拼音全键无法正常联想以及输入汉字高亮区识别不计入长度计数的问题,感兴趣的给个赞或者关注~~~