iOS-UI藤原とうふ店(自家用)

UITextField限制输入字数以及限制emoji输入的实现方

2016-10-13  本文已影响224人  kikido

在开发中,可能会遇到服务器后台数据库不能识别IOS系统表情,导致存储出错的问题,所以就需要禁止系统emoji表情的输入.并且有时候会用到限制数字的问题,找了好多种方法总算找到一种比较好的方法.

先看一下效果

![](http:https://img.haomeiwen.com/i1929756/e21314939da7701c.gif?imageMogr2/auto-orient/strip)

下面是实现代码

1. 添加代理及文本输入响应事件


[textField addTarget:self action:@selector(textFiledEditChanged:) forControlEvents:UIControlEventEditingChanged]; 
textField.delegate = self;

2. 实现代理方法以及相应方法

2.1 实现代理方法

为了使输入模式为emoji时不能进行输入操作

文本输入模式为emoji时

#pragma mark ----UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {   
 
    //当文本输入模式为"emoji"时禁止输入
    if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"emoji"]) {
        return NO;
    }
    return YES;
}
2.2 实现响应事件

虽然不能通过表情界面输入表情了,可是当输入法为中文的时候还是可以联想出emoji的,所以为了解决这个问题,就必须为UITextField添加响应事件来解决.

- (void)textFiledEditChanged:(UITextField *)textField {
    
    if (textField.text.length > 0) {
        // 禁止系统表情的输入
        NSString *text = [self disable_emoji:textField.text];
        if (![text isEqualToString:textField.text]) {
            textField.text = text;
        }
    }
    
    //获取高亮部分
    UITextRange *selectedRange = [textField markedTextRange];
    UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
    
    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position) {
        if (textField.text.length > MAX_STRING_LENGTH) {
            textField.text = [textField.text substringToIndex:MAX_STRING_LENGTH];
        }
    }
}

- (NSString *)disable_emoji:(NSString *)text{
    
    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:text
                                                               options:0
                                                                 range:NSMakeRange(0, [text length])
                                                          withTemplate:@""];
    return modifiedString;
}

其中MAX_STRING_LENGTH为文本最大字数(自己设置),emoji的Unicode编号为:Emoji

3. 参考资料

4. DEMO

本篇文章写的小DEMO

上一篇下一篇

猜你喜欢

热点阅读