iOS限制UITextField的输入字符数

来源:互联网 发布:2017 java 编辑:程序博客网 时间:2024/05/16 13:06

欢迎到个人博客: liumh.com查看本文。

本文为原创,未经允许勿转载


项目中经常会遇到限制UITextField中输入字符数的需求,并且会根据输入的英文还是中文给出不同的限定数,本文记录其解决方案。

对于全英文的输入限定很简单,但是输入中文时,当输入拼音但未选择中文时,此时输入文本框的文字会包括输入的拼音,是选中的状态,比如这样:

输入中文时包含选中状态的拼音

上面的情况如果打印UITextField的text属性会输出:中国di zhi。由于拼音是选中状态的,那么可以根据 UITextInput 协议判断UITextField中是否有选中状态的字符,从而决定是否对输入字符进行截断处理。

当UITextField中输入文本发生变化时,会发送 UITextFieldTextDidChangeNotification ,先监听此消息通知:

- (void)viewDidLoad {    [super viewDidLoad];    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkTextFieldTextLength:) name:UITextFieldTextDidChangeNotification object:nil];}- (void)dealloc {    [[NSNotificationCenter defaultCenter] removeObserver:self];}

然后在checkTextFieldTextLength:消息中处理输入限定:

- (void)checkTextFieldTextLength:(NSNotification *)noti{    UITextField *textField = noti.object;    NSString *text = textField.text;    NSLog(@"text: %@", text);    //记录待选文字记录    UITextRange *markedTextRange = textField.markedTextRange;    //如果存在待选文字记录,则暂不处理    if (markedTextRange) {        return;    }    //获取文本的字节长度    NSUInteger lenOfBytes = [text lengthOfBytesUsingEncoding:NSUTF8StringEncoding];    if (text.length == lenOfBytes && text.length > kMaxEnglishLen) {     //全英文字符        textField.text = [text substringToIndex:kMaxEnglishLen];    } else if (text.length != lenOfBytes && text.length > kMaxChineseLen) {    //包含非英文字符        textField.text = [text substringToIndex:kMaxChineseLen];    }}

另外,可利用UIRespondertextInputMode属性获取当前键盘所使用的输入模式,例如使用中文输入法时,在上述checkTextFieldTextLength:消息中插入:

NSLog(@"textField.textInputMode: %@", [textField.textInputMode primaryLanguage]);

会打印出:

textField.textInputMode: zh-Hans

意味着此时用户正使用中文输入法.

参考:

iOS:UITextField中文输入法输入时对字符长度的限制


如果觉得本文对你有帮助,就请用微信打赏我吧^_^

请叶秋喝杯咖啡吧

0 0