需求:
textfield中限制輸入字?jǐn)?shù)痢掠,不管是中文還是英文,或者中英文混合砖瞧,總數(shù)限制15個(gè)息堂,對(duì)輸入的漢字或英文字符都要求很精確,嘗試了好幾種辦法块促,如果只輸入中文荣堰,或者只輸入英文,用普通的完全沒有問題竭翠,但是如果是中英文混合振坚,就計(jì)算不準(zhǔn)了。
上網(wǎng)搜了下面的這種辦法逃片,實(shí)踐之后完全沒有問題屡拨,在此記錄一下,忘記原文在哪看的了褥实,如有侵權(quán)請(qǐng)聯(lián)系我呀狼。首先在viewDidload中添加下面的通知,監(jiān)聽textfield編輯時(shí)的變化
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:) name:UITextFieldTextDidChangeNotification object:textFields];
- 實(shí)現(xiàn)textfield編輯的時(shí)候調(diào)用的方法损离,當(dāng)達(dá)到最大限制之后哥艇,之后輸入的文字就不顯示,只截取需要的數(shù)量僻澎。
- (void)textFiledEditChanged:(NSNotification *)notification {
UITextField *textFieldtest = (UITextField *)notification.object;
NSString *toBeString = textFieldtest.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 鍵盤輸入模式
if([lang isEqualToString:@"zh-Hans"]) { //簡(jiǎn)體中文輸入貌踏,包括簡(jiǎn)體拼音,健體五筆窟勃,簡(jiǎn)體手寫
UITextRange *selectedRange = [textFieldtest markedTextRange];
//獲取高亮部分
UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
//沒有高亮選擇的字祖乳,則對(duì)已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計(jì)和限制
if(!position) {
if(toBeString.length > 15) {
textFieldtest.text = [toBeString substringToIndex:15];
}
}
}
else if ([lang isEqualToString:@"en-US"]) {
UITextRange *selectedRange = [textFieldtest markedTextRange];
UITextPosition *position = [textFieldtest positionFromPosition:selectedRange.start offset:0];
if(!position) {
if(toBeString.length > 32) {
textFieldtest.text = [toBeString substringToIndex:32];
}
}
}
text2 = textFieldtest.text;
}
- 最后別忘了在dealloc 中移除通知。
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:textFields];
}