Last active
August 29, 2015 14:04
-
-
Save xuyunan/f29e5883126786f9bf2e to your computer and use it in GitHub Desktop.
字符个数限制
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// - (void)viewDidAppear | |
[[NSNotificationCenter defaultCenter] addObserver:self | |
selector:@selector(textFieldTextDidChangeNotification:) | |
name:UITextFieldTextDidChangeNotification | |
object:nil]; | |
// - (void)viewDidDisappear | |
[[NSNotificationCenter defaultCenter] removeObserver:self | |
name:UITextFieldTextDidChangeNotification | |
object:nil]; | |
#pragma mark - UITextViewTextDidChangeNotification | |
- (void)textViewTextDidChangeNotification:(NSNotification *)notification | |
{ | |
UITextView *textView = (UITextView *)notification.object; | |
NSString *toBeString = textView.text; | |
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式 | |
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写 | |
UITextRange *selectedRange = [textView markedTextRange]; | |
//获取高亮部分 | |
// UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0]; | |
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制 | |
if (!selectedRange) { | |
int length = [StringUtility calculateTextNumber:toBeString]; | |
if (length > MAX_CONTENT) { | |
textView.text = [toBeString substringToIndex:[StringUtility calculateSubstringIndex:toBeString | |
count:MAX_CONTENT]]; | |
} | |
} | |
// 有高亮选择的字符串,则暂不对文字进行统计和限制 | |
else{ | |
} | |
} | |
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 | |
else { | |
int length = [StringUtility calculateTextNumber:toBeString]; | |
if (length > MAX_CONTENT) { | |
textView.text = [toBeString substringToIndex:[StringUtility calculateSubstringIndex:toBeString | |
count:MAX_CONTENT]]; | |
} | |
} | |
} | |
// StringUtility | |
+ (int)calculateTextNumber:(NSString *)dataString | |
{ | |
float sum = 0.0; | |
for(int i=0;i<[dataString length];i++) | |
{ | |
NSString *character = [dataString substringWithRange:NSMakeRange(i, 1)]; | |
if([character lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) | |
{ | |
sum += 2; | |
} | |
else | |
sum += 1; | |
} | |
return ceil(sum); | |
} | |
+ (int)calculateSubstringIndex:(NSString *)text count:(NSUInteger)count | |
{ | |
float number = 0.0; | |
for (int index = 0; index < [text length]; index++) { | |
NSString *character = [text substringWithRange:NSMakeRange(index, 1)]; | |
if ([character lengthOfBytesUsingEncoding:NSUTF8StringEncoding] == 3) { | |
number += 2; | |
} else { | |
number += 1; | |
} | |
if (number > count) { | |
return index; | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment