實(shí)際開發(fā)當(dāng)中很多要用到對(duì)UItextfield或者UItextfield輸入的監(jiān)聽,限制字?jǐn)?shù)及其他一些處理肝谭,但是由于中文輸入法的鍵盤上有聯(lián)想玻靡、推薦的功能,所以使用這兩個(gè)控件的代理方法可能導(dǎo)致文本內(nèi)容長度上有些不符合預(yù)期命贴,導(dǎo)致越界使處理?xiàng)l件出錯(cuò),所以可以考慮使用以下方法來實(shí)現(xiàn)文本控制條件:
1.首先需要注冊(cè)通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onTextViewEditChanged:) name:@"UITextViewTextDidChangeNotification" object:nil];
2.實(shí)現(xiàn)監(jiān)聽方法:
// 監(jiān)聽字符變化食听,并處理
- (void)onTextViewEditChanged:(NSNotification *)obj
{
UITextView *textView = (UITextView *)obj.object;
self.placeholderLab.hidden = textView.hasText;
if (ReportTextViewMaxLength > 0)
{
NSString *toBeString = textView.text;
//獲取當(dāng)前高亮
UITextRange *selectedRange = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 如果沒有高亮選擇胸蛛,則對(duì)已經(jīng)輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)、限制
if (!position)
{
if (toBeString.length > ReportTextViewMaxLength)
{
[textView shake];
[MBProgressHUD show:@"舉報(bào)內(nèi)容最多為60字樱报!" icon:nil view:[UIApplication sharedApplication].keyWindow hideAfterDelay:1.0];
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:ReportTextViewMaxLength];
if (rangeIndex.length == 1)
{
textView.text = [toBeString substringToIndex:ReportTextViewMaxLength];
}
else
{
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, ReportTextViewMaxLength)];
textView.text = [toBeString substringWithRange:rangeRange];
}
}
}
}
//這里可以實(shí)現(xiàn)其他需要的處理葬项。
}
}
3.最后不要忘了在頁面銷毀的時(shí)候移除通知:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextViewTextDidChangeNotification" object:nil];