iOS限制文本输入长度进阶之 二
2014-12-22 12:16
453 查看
想在最后还能输入中文?
当然得找到,输入了拼音还没选择汉字的标记啦!
什么?你疑惑会没有标记?
的确我也有过这样的疑惑,因为找遍了UITextField,完全是没有头绪的
UITextField里没有,肯定就要找和它关联的啦
好了,不和你绕圈子了,直接揭晓
UITextField的UITextInput协议中有这么一个属性markedTextRange
@property (nonatomic, readonly) UITextRange *markedTextRange; //如果没有高亮文本则为nil
上篇文章最终代码为3. 这里以此为基础进行优化,这里重复一次
目标:最后一个位置输入汉字可以突破限制
的确可以超过限制了,可是却没发删除了,别着急,有办法,在添加一个判断逻辑
这样一来,问题又来了,当选择汉字时,字数可能就已经超过了最大字数,因此还需要增加一些逻辑
自此,已经算是可以解决中文输入限制的问题了,说了这么多就最后这些才是最终的 ^_^ 更多的就需要自己解决了
当然得找到,输入了拼音还没选择汉字的标记啦!
什么?你疑惑会没有标记?
的确我也有过这样的疑惑,因为找遍了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限制文本输入长度进阶之 一
- iOS(Swift) TextField限制输入文本的长度(不是字数)
- iOS(Swift) TextField限制输入文本的长度(不是字数)
- [iOS] UITextField如何准确限制中文输入文本长度
- ios 限制输入长度
- iOS:UITextField中文输入法输入时对字符长度的限制
- iOS:UITextField中文输入法输入时对字符长度的限制
- ios textfield限制中文输入长度
- ios 限制输入长度
- iOS【textView或者textField文本输入字数限制】
- iOS---限制文本框输入的长度
- textView中判断文本长度,自定义表情长度为1,emoj表情长度为1,输入限制
- iOS 代码限制textField的输入长度并且删除按钮还得有效
- IOS中如何限制TextField中输入的类型以及长度
- iOS:UITextField中文输入法输入时对字符长度的限制
- 文本编辑框--限制输入字符长度
- iOS:UITextField中文输入法输入时对字符长度的限制
- iOS:UITextField中文输入法输入时对字符长度的限制
- IOS开发中限制TextField输入的类型及长度的方法
- iOS 限制UITextField的输入长度