控制textFiled、textView输入的字数

一、首先我们要认识一个类
1、键盘的输入模式

UITextInputMode : 他的作用就是获取用户当前输入时使用的是什么键盘。

2、获取方法

首先在用户开始输入之前注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeMode:) name:@"UITextInputCurrentInputModeDidChangeNotification" object:nil];
然后实现上面的方法:
-(void) changeMode:(NSNotification *)notification{
//废弃的方法
NSLog(@"%@",[[UITextInputMode currentInputMode] primaryLanguage]);

//注,这样也可以,但是不建议去使用
 [UIApplication sharedApplication].delegate.window.textInputMode.primaryLanguage;
}
这样就能拿到值了。

当然,我们还用更简便的方法
 // 获取键盘输入模式
    UITextInputMode * mode = (UITextInputMode *)[UITextInputMode activeInputModes][0];
    NSString *lang = [mode primaryLanguage];

二、一个完正的代码—将此方法放在 - (void)textViewDidChange:(UITextView *)textView{ }中即可

+ (void)limitTextViewNumberOfString:(UITextView *)textView withNumber:(NSInteger)num{
    
    NSString *toBeString = textView.text;
    
    // 获取键盘输入模式
    UITextInputMode * mode = (UITextInputMode *)[UITextInputMode activeInputModes][0];
    NSString *lang = [mode primaryLanguage];
    
    // 简体中文输入,包括简体拼音,健体五笔,简体手写
    if ([lang isEqualToString:@"zh-Hans"]) {
    /*
     * markedTextRange就是用来判断输入中文时,英文是否已经转为中文了。 当 textView.markedTextRange == nil 的时候就说明已经转为中文了。
     * 或者这样说更直接:通过以上的说明,在解决上述问题的时候你需要判断markedTextRange是不是为Nil,如果为Nil的话就说明你现在没有未选中的字符,可以计算文字长度。否则此时计算出来的字符长度可能不正确。
     */
        UITextRange *selectedRange = [textView markedTextRange];
        
        //获取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            if (toBeString.length > num) {
                textView.text = [toBeString substringToIndex:num];
            }
        }
        // 有高亮选择的字符串,则暂不对文字进行统计和限制
        else{
            
        }
    }
    // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
    else{
        if (toBeString.length > num) {
            textView.text = [toBeString substringToIndex:num];
        }
    }
}

你可能感兴趣的:(控制textFiled、textView输入的字数)