需求是這樣的:
在輸入框內(nèi)輸入文字淳地,字?jǐn)?shù)在40字以內(nèi)著拭,并實(shí)時(shí)統(tǒng)計(jì)反饋給用戶。
我使用了UITextView并實(shí)現(xiàn)了委托:
- (void)textViewDidChange:(UITextView *)textView
{
[self checkText:textView];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
retrun [self checkText:textView];
}
- (BOOL)checkText:(UITextView *)textView
{
NSString *text = textView.text;
if (text.length > kMaxLength)
{
textView.text = [text substringToIndex:kMaxLength];
return NO;
}
return YES;
}
分別試了下兩個(gè)委托刨晴,實(shí)現(xiàn)的效果都不太好屉来,會(huì)出現(xiàn)中文無限輸入路翻,備選框中的文字無法被選擇的情況。
重新修改了委托:
- (void)textViewDidChange:(UITextView *)textView
{
NSString *lang = [[[UITextInputMode activeInputModes] firstObject] primaryLanguage];//當(dāng)前的輸入模式
if ([lang isEqualToString:@"zh-Hans"])
{
// 如果輸入有中文茄靠,且沒有出現(xiàn)文字備選框就對字?jǐn)?shù)統(tǒng)計(jì)和限制
// 出現(xiàn)了備選框就暫不統(tǒng)計(jì)
UITextRange *range = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:range.start offset:0];
if (!position)
{
[self checkText:textView];
}
}
else
{
[self checkText:textView];
}
}
- (void)checkText:(UITextView *)textView
{
NSString *string = textView.text;
if (string.length > kMaxLength)
{
textView.text = [string substringToIndex:kMaxLength];
}
NSInteger length = textView.text.length;
NSInteger num = kMaxLength - length;
num = MAX(num, 0);
[self.wordLabel setText:[NSString stringWithFormat:@"還可以輸入%d字",(int)num]];
[self.placeholderLabel setHidden:textView.text.length == 0 ? NO : YES];
}