接到一個(gè)需求:評(píng)論輸入框控制用戶只能輸入200個(gè)字声滥。于是在
- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text
{
//添加如下代碼
NSString* toBeString = [textView.textstringByReplacingCharactersInRange:rangewithString:text];
if(toBeString.length>self.maxTextInputNum) {
returnNO;
}
}
可是這樣的話跺株,可以在輸入中文的時(shí)候無限點(diǎn)擊提示苍日,于是各種搜索宅楞,找到了以下方法:
適用于textView textField
+ (void)limitTextInputWithNotification: (NSNotification *)noti InMaxLength: (CGFloat)length {
id textInput;
if ([noti.object isKindOfClass:[UITextField class]]) {
textInput = (UITextField *)noti.object;
} else if ([noti.object isKindOfClass:[UITextView class]]) {
textInput = (UITextView *)noti.object;
} else {
return;
}
NSString *toBeString = [textInput text];
// if ([noti.object isKindOfClass:[UITextField class]]) { //昵稱禁止輸入表情
// [textInput setText:[self disable_emoji:[textInput text]]];
// }
NSString *lang = [[textInput textInputMode] primaryLanguage];
if ([lang isEqualToString:@"zh-Hans"])// 簡體中文輸入
{
//獲取高亮部分
UITextRange *selectedRange = [textInput markedTextRange];
UITextPosition *position = [textInput positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字针姿,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
if (!position)
{
if (toBeString.length > length)
{
[textInput setText:[toBeString substringToIndex:length]];
}
}
}
// 中文輸入法以外的直接對(duì)其統(tǒng)計(jì)限制即可,不考慮其他語種情況
else
{
if (toBeString.length > length)
{
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:length];
if (rangeIndex.length == 1)
{
[textInput setText:[toBeString substringToIndex:length]];
}
else
{
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, length)];
[textInput setText: [toBeString substringWithRange:rangeRange]];
}
}
}
}
使用時(shí)候發(fā)送通知即可:
_NC_Add(self, @selector(textViewEditChanged:),UITextViewTextDidChangeNotification, nil);
監(jiān)聽通知:
- (void)textViewEditChanged:(NSNotification *)notif;
{
[Untitles limitTextInputWithNotification:notif InMaxLength:200];
}