美文网首页
UITextField限制表情输入,限制输入长度

UITextField限制表情输入,限制输入长度

作者: 放肆的洒脱 | 来源:发表于2018-04-02 13:36 被阅读38次

    一、需求是输入框输入限制表情的输入,限制输入长度

    1、判断是否是九宫格输入

    + (BOOL)isNineKeyBoard:(NSString *)string
    {
        NSString *other = @"➋➌➍➎➏➐➑➒";
        int len = (int)string.length;
        for(int i=0;i<len;i++)
        {
            if(!([other rangeOfString:string].location != NSNotFound))
                return NO;
        }
        return YES;
    }
    

    2、判断是否是emoji表情输入

    + (BOOL)stringContainsEmoji:(NSString *)string {
        
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]"options:NSRegularExpressionCaseInsensitive error:nil];
        NSString *modifiedString = [regex stringByReplacingMatchesInString:string
                                                                   options:0
                                                                     range:NSMakeRange(0, [string length])
                                                              withTemplate:@""];
        
        return modifiedString.length == 0? YES : NO;
    }
    

    3、在textField代理方法里判断

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        
        if ([FSLMethod isNineKeyBoard:string]) {
            return YES;
        }
        if ([FSLMethod stringContainsEmoji:string]) {
            
            return NO;
        }else
            
            return YES;
    }
    

    二、输入长度限制
    1、给要判断的textField添加监听方法

    [nameTextField addTarget:self action:@selector(textFieldEditChanged:) forControlEvents:UIControlEventEditingChanged];
    

    2、在监听方法里做判断限制

    - (void)textFieldEditChanged:(UITextField *)textField
    {
        [self changeSubBtnBackgroudImage];
        if (textField == self.enterpriseTextField) {  // 企业全称
    
            [self textFieldEditChanged:textField withMaxLength:30];
        }else if (textField == self.nameTextField) { // 名字
    
            [self textFieldEditChanged:textField withMaxLength:10];
        }else if (textField == self.positionTextField) { // 职位
    
            [self textFieldEditChanged:textField withMaxLength:10];
        }else if (textField == self.addrTextField) {             // 详细地址
    
            [self textFieldEditChanged:textField withMaxLength:50];
        }
    }
    
    - (void)textFieldEditChanged:(UITextField *)textField withMaxLength:(NSInteger)maxlength
    {
         NSString *toBeString = textField.text;
        NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
        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];
    //                [self alertInfo:@"商讯标签超出字数限制"];
    //                self.titleRightLabel.text = @"30/30";
                    textField.text = [textField.text substringToIndex:maxlength];
                    
                }
            }
            // 有高亮选择的字符串,则暂不对文字进行统计和限制
            else{
                
            }
        }
        // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        else{
            if (toBeString.length > maxlength) {
                textField.text = [toBeString substringToIndex:maxlength];
    //            [self alertInfo:@"商讯标签超出字数限制"];
    //            self.titleRightLabel.text = @"30/30";
                textField.text = [textField.text substringToIndex:maxlength];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:UITextField限制表情输入,限制输入长度

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