UITextField如何限制限制文本输入长度

UITextField如何限制限制文本输入长度

  • 原理和UITextView限制文本输入长度原理一样,不同的是UITextField可以监听UIControlEventEditingChanged事件获取到UITextField文本输入改变;UITextView需要监听UITextViewTextDidChangeNotification通知
    [field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];

1. 具体实现代码


- (void)testTextField

{

    UITextField *field = [[UITextField alloc] init];

    field.frame = CGRectMake(100, 155, 200, 50);

    [self.view addSubview:field];

    field.backgroundColor = [UIColor grayColor];

    [field addTarget:self action:@selector(fieldTextDidChange:) forControlEvents:UIControlEventEditingChanged];

}

- (void)fieldTextDidChange:(UITextField *)textField

{

    /**

     *  最大输入长度,中英文字符都按一个字符计算

     */

    static int kMaxLength = 10;

    

    NSString *toBeString = textField.text;

    // 获取键盘输入模式

    NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage];

    // 中文输入的时候,可能有markedText(高亮选择的文字),需要判断这种状态

    // zh-Hans表示简体中文输入, 包括简体拼音,健体五笔,简体手写

    if ([lang isEqualToString:@"zh-Hans"]) {

        UITextRange *selectedRange = [textField markedTextRange];

        //获取高亮选择部分

        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];

        // 没有高亮选择的字,表明输入结束,则对已输入的文字进行字数统计和限制

        if (!position) {

            if (toBeString.length > kMaxLength) {

                // 截取子串

                textField.text = [toBeString substringToIndex:kMaxLength];

            }

        } else { // 有高亮选择的字符串,则暂不对文字进行统计和限制

        }

    } else {

        // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况

        if (toBeString.length > kMaxLength) {

            // 截取子串

            textField.text = [toBeString substringToIndex:kMaxLength];

        }

    }

}
  • iOS技术开发交流QQ群: 579572313

你可能感兴趣的:(UITextField如何限制限制文本输入长度)