? ? ? ? 今天被這個問題坑了一天.在UITextField的delegate方法里,各種判斷.結果還是有bug.最明顯的是中文輸入模式下,聯想輸入可以突破字數限制.
今天找到一種方法,注冊觀察者UITextFieldTextDidChangeNotification.如果UITextField內容改變,就計算字數并判斷.分三步走:
第一步:注冊觀察者.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:_partNameTextField];
- (void)textFieldDidChange:(NSNotification *)obj{ UITextField * textField = (UITextField *)obj.object; NSString *toBeString = textField.text; // 鍵盤輸入模式(判斷輸入模式的方法是iOS7以后用到的,如果想做兼容,另外谷歌) NSArray * currentar = [UITextInputMode activeInputModes]; UITextInputMode * current = [currentar firstObject]; if ([current.PRimaryLanguage isEqualToString:@"zh-Hans"]) { // 簡體中文輸入,包括簡體拼音,健體五筆,簡體手寫 UITextRange *selectedRange = [textField markedTextRange]; //獲取高亮部分 UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; // 沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制 if (!position) { if (toBeString.length > kTextFieldLengthLimit) { textField.text = [toBeString substringToIndex:kTextFieldLengthLimit]; [self showErrorTips:nil message:NSLocalizedString(@"textField_length_limit", nil)];//此方法是我引入的第三方警告框.讀者可以自己完成警告彈窗. } } // 有高亮選擇的字符串,則暫不對文字進行統計和限制 else{ } } // 中文輸入法以外的直接對其統計限制即可,不考慮其他語種情況 else{ if (toBeString.length > kTextFieldLengthLimit) { textField.text = [toBeString substringToIndex:kTextFieldLengthLimit]; } } }? ? ? ? 第三步:銷毀觀察者.
- (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:_partNameTextField];}?
? ? ? ? 好了,打完收工.
?
?
新聞熱點
疑難解答