一、首先我們要認識一個類
1、鍵盤的輸入模式
UITextInputMode : 他的作用就是獲取用戶當前輸入時使用的是什么鍵盤歌豺。
2、獲取方法
首先在用戶開始輸入之前注冊通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeMode:) name:@"UITextInputCurrentInputModeDidChangeNotification" object:nil];
然后實現(xiàn)上面的方法:
-(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就是用來判斷輸入中文時践美,英文是否已經(jīng)轉(zhuǎn)為中文了洗贰。 當 textView.markedTextRange == nil 的時候就說明已經(jīng)轉(zhuǎn)為中文了。
* 或者這樣說更直接:通過以上的說明陨倡,在解決上述問題的時候你需要判斷markedTextRange是不是為Nil敛滋,如果為Nil的話就說明你現(xiàn)在沒有未選中的字符,可以計算文字長度兴革。否則此時計算出來的字符長度可能不正確绎晃。
*/
UITextRange *selectedRange = [textView markedTextRange];
//獲取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進行字數(shù)統(tǒng)計和限制
if (!position) {
if (toBeString.length > num) {
textView.text = [toBeString substringToIndex:num];
}
}
// 有高亮選擇的字符串杂曲,則暫不對文字進行統(tǒng)計和限制
else{
}
}
// 中文輸入法以外的直接對其統(tǒng)計限制即可庶艾,不考慮其他語種情況
else{
if (toBeString.length > num) {
textView.text = [toBeString substringToIndex:num];
}
}
}