我們在開發(fā)中很多時候會遇到需要顯示輸入框的文本輸入長度,一般就直接通過監(jiān)聽textField的文字改變并做處理就好了粘优,但是有時候往往不注意就會出現小bug,如果只是這樣寫的話
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name:UITextFieldTextDidChangeNotification object:nil];
}
-(void)textDidChange:(NSNotification *)noti{
NSString *textFieldStr = self.textField.text;
//監(jiān)聽文字改變吻氧,當超出時截取
if (self.textField.text.length > 10) {
self.textField.text= [textFieldStr substringToIndex:10];
}
}
就如下面這樣
之所以會這樣是因為我們在輸入的時候沒有判斷中文輸入法中正在輸入的拼音(也就是選中的部分內容所占的長度)在TextField中占的長度玄柠,這樣當輸入我們所要控制長度一半的拼音字母的時候就會自動截取前五個(假如我們設的最大長度為10)或者(10-前面輸入內容)/ 2個字符
解決這個問題可以在textDidChange這個方法中判斷當前輸入法是什么,并且是否有正在輸入的拼音咱圆,如果有暫時不做處理笛辟,沒有的話再進行截取,
修改后的textDidChange方法大概是這樣的
-(void)textDidChange:(NSNotification *)noti{
//首先判斷是否設置了最大長度序苏,如果沒有則直接返回
if (self.maxLength == 0) {
return;
}
//獲取TextField
UITextField *textField = (UITextField *) noti.object;
//獲取TextField中的內容
NSString *str = textField.text;
// 獲取鍵盤輸入模式
NSString *currentInputMode = [[UITextInputMode currentInputMode] primaryLanguage];
//簡體中文輸入手幢,包括簡體拼音,健體五筆忱详,簡體手寫
if([currentInputMode isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textField markedTextRange];
//獲取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
//如果沒有高亮選擇的字围来,則對已輸入的文字進行字數統(tǒng)計和限制,有高亮的字則不做處理
if(!position) {
if(toBeString.length > self.maxLength) {
textField.text = [str substringToIndex:self.maxLength];
}
}
}
//中文輸入法之外的輸入則不需要再加以判斷直接截取就ok了
else{
if(toBeString.length > self.maxLength) {
textField.text= [toBeString substringToIndex:self.maxLength];
}
}
}
然后我們來看一下效果
是不是可以爽快的進行輸入了匈睁,沒有任何問題管钳,哈哈哈,ok软舌,就這樣解決掉了這個問題
哪里表達不準確歡迎大神指正~~~