一、首先我们要认识一个类
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];
}
}
}