標籤:
想在最後還能輸入中文?
當然得找到,輸入了拼音還沒選擇漢字的標記啦!
什嗎?你疑惑會沒有標記?
的確我也有過這樣的疑惑,因為找遍了UITextField,完全是沒有頭緒的
UITextField裡沒有,肯定就要找和它關聯的啦
好了,不和你繞圈子了,直接揭曉
UITextField的UITextInput協議中有這麼一個屬性markedTextRange
@property (nonatomic, readonly) UITextRange *markedTextRange; //如果沒有高亮文本則為nil
上篇文章最終代碼為3. 這裡以此為基礎進行最佳化,這裡重複一次
3.- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (range.location >= 10){ return NO; } return YES;}
目標:最後一個位置輸入漢字可以突破限制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (range.location >= 10 && (textField.markedTextRange == nil)){ return NO; } return YES;}
的確可以超過限制了,可是卻沒發刪除了,別著急,有辦法,在添加一個判斷邏輯
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (range.location >= 10 && (textField.markedTextRange == nil && range.length == 0)){ return NO; } return YES;}
.length == 0,表示輸入更多, .length == 1則表示刪除
這樣一來,問題又來了,當選擇漢字時,字數可能就已經超過了最大字數,因此還需要增加一些邏輯
#define MAXNumber 10
[self.field addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField{ if (textField.markedTextRange == nil) { if (textField.text.length > MAXNumber) { textField.text = [textField.text substringToIndex:MAXNumber]; } }}- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (range.location >= MAXNumber && (textField.markedTextRange == nil && range.length == 0)){ return NO; } return YES;}
自此,已經算是可以解決中文輸入限制的問題了,說了這麼多就最後這些才是最終的 ^_^ 更多的就需要自己解決了
iOS限制文本輸入長度進階之 二