iOS 解决汉字联想输入,导致字数限制失效的问题

字数限制的问题点在于汉语可以无限汉语联想词汇,导致字数限制对于汉字输入就失去的作用。我们的做法是监听键盘联想出来的汉子,将其统计:

1 在viewDidLoad里面监听文本变化的通知

- (void)viewDidLoad {
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewEditChanged:) name:UITextFieldTextDidChangeNotification object:detailAddress];      
}

2 实现这个textViewEditChanged:方法

// 监听文本改变
-(void)textViewEditChanged:(NSNotification *)obj{
    
    UITextField *textField = (UITextField *)obj.object;

    NSString *toBeString = textField.text;
    
    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
    
    NSUInteger maxLength = MaxNumberOfDescriptionChars-curZone.text.length-1;//加上自动定位的地址,上限是45个汉字
    
    if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        
        UITextRange *selectedRange = [textField markedTextRange];
        
        //获取高亮部分
        
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
        
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        
        if (!position) {
            
            if (toBeString.length > maxLength) {
                
                textField.text = [toBeString substringToIndex:maxLength];
                
            }
            
        }
        
        // 有高亮选择的字符串,则暂不对文字进行统计和限制
        
        else{
            
            
            
        }
        
    }
    
    // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
    
    else{
        
        if (toBeString.length > maxLength) {
            
            textField.text = [toBeString substringToIndex:maxLength];
            
        }
        
    }
    
}

3 当然,你还需要在textField的delegate方法里面做正常的限制

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if ([string isEqualToString:@""])
    {
        return YES;
    }
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    
    if (detailAddress == textField)
    {
        NSUInteger maxLength = MaxNumberOfDescriptionChars;//设置文字上限
        if ([toBeString length] > maxLength) {
            textField.text = [toBeString substringToIndex:maxLength];
            [Utils showToastWithText:@"超过最大字数限制"];
            return NO;
        }
    }
    return YES;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖蕾的博客

第八章:演员演员类的简介Actor类使用以及方法flip()方法的使用splite

1.定义:在二维场景中,最基本的活动元素,它是构成游戏的基本元,演员拥有,位置,大小,起点,旋转角度,颜色等属性。 2.演员可以结合Action来实现演员在时...

8710
来自专栏非典型技术宅

iOS动画系列之六:利用CABasic Animation完成带动画特效的登录界面1. 画风突变的笑脸2. 心跳3. iOS实践:实现一个带动效的登录界面

14560
来自专栏Android干货园

Android源码解析--Material Design之水波纹点击效果RippleEffect使用

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48...

45520
来自专栏一“技”之长

AppleWatch开发入门九——Watch帧动画的实现

        动画一直是iOS系统的一大亮点,CoreAnimation和粒子效果的支持,开发者可以很容易的做出效果炫酷的动画特效。在watchOS中,由于性...

9720
来自专栏向治洪

react native仿微信PopupWindow效果

在原生APP开发中,相信很多开发者都会见到这种场景:点击右上角更多的选项,弹出一个更多界面供用户选择。这种控件在原生开发中Android可以用PopupWind...

54170
来自专栏iOS122-移动混合开发研究院

Pop–实现任意iOS对象的任意属性的动态变化

简介 Pop 是一个可扩展的动画引擎,可用于实现任意iOS对象的任意属性的动态变化,支持一般动画,弹性动画和渐变动画三种类型. 最新示例: 点击下载 注...

20770
来自专栏Alice

绘图quartz之加水印

实现在图片上加一个水印  并存在document的路径下  同时在手机相册中也存一份 //首先开启imageContext找到图片     UIGraphics...

22160
来自专栏青玉伏案

iOS开发之微信聊天工具栏的封装

之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧。之前已经把微信的视图结构简单的拖了一下(iOS开发之微信山寨版),今天就开始给微...

29480
来自专栏MasiMaro 的技术博文

对话框伸缩功能的实现

对话框的伸缩功能是指当触发某一操作时只显示部分对话框的内容,再次触发时显示全部的对话框范围,就比如画图软件上的选择颜色对话框,我们可以使用系统预定义的颜色,也可...

12520
来自专栏非著名程序员

基础篇章:关于 React Native 之 Modal 组件的讲解

(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) Modal是模态视图,它的作用是可以用来覆盖...

27370

扫码关注云+社区

领取腾讯云代金券