UITextField、UITextView限制输入的方案

一、需求:
1、限制输入TextField输入上限为18字(数字、汉字、英文都按一个字计算、表情按2字计算、等同于string.length);
2、到达输入上限后或复制大段文字后截取前18字;

二、代码
1、给textField添加监听方法。

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

2、处理textFieldDidChangd:

    NSString *toBeString = textField.text;
    if (![textField markedTextRange]) { //判断是否输入完成状态
        if (toBeString.length > 18) {
            textField.text = [toBeString ds_subStringLength:kMaxLength];
        }
    }

3、字符串截取的处理,发现最后一个字符串是表情时使用系统方法截取字符串后出现乱码;自定义了一个截取字符串的方法;

- (NSString *)ds_subStringLength:(NSUInteger)length{
    NSInteger subLength = 0;
    NSRange range;
    for (int i = 0; i < self.length;i+= range.length) {
        range = [self rangeOfComposedCharacterSequenceAtIndex:i];// 获取当前位置字符的的区间
        NSString *str = [self substringWithRange:range];
        subLength += range.length;
        if (subLength > length) {
            return [self substringToIndex:i];
        }
    }
    return nil;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容