限制输入内容

概述:

在开发中,为了与用户进行沟通,一般都会有让用户输入的东西,尤其是在登录的时候,也必须要让用户输入合乎规范的输入内容,因此我特地在网上查了一下UITextField和UITextView的对输入内容的限制,发现有一些限制是存在问题的,所以此文特地总结了一下正确的限制方法。

UITextField对输入内容的限制

注意:UITextField最好使用添加方法的办法来限制长度,如果使用代理的方法来限制长度,是比较麻烦的。使用通知的话性能会有所降低。

方法一:添加事件
//创建一个UITextField对象
UITextField *textFld = [[UITextField alloc] init];
//添加方法,一旦textField的内容改变就会调用设置的方法
[textFld addTarget:self action:@selector(textFldChange:) forControlEvents:UIControlEventEditingChanged];

-(void)textFldChange:(UITextField *)textFld{
    //这里拿到的就是textFld上面的内容
    NSLog(@"%@",textFld.text);

    //限制长度为11位
    if (textFld.text.length >= 11) {
        textFld.text = [textFld.text substringWithRange:NSMakeRange(0, 11)];
    }
}
方法二:发送通知
//创建一个UITextField对象
UITextField *textFld = [[UITextField alloc] init];
//添加通知,一旦textField的内容改变就会调用设置的方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFldChange:) name:UITextFieldTextDidChangeNotification object:textFld];

-(void)textFldChange:(NSNotification *)notification{
    UITextField *textFld = (UITextField *)notification.object;
    //这里拿到的就是textFld上面的内容
    NSLog(@"%@",textFld.text);

    //限制长度为11位
    if (textFld.text.length >= 11) {
        textFld.text = [textFld.text substringWithRange:NSMakeRange(0, 11)];
    }
}
方法三:代理的方式
//创建一个UITextField对象
UITextField *textFld = [[UITextField alloc] init];
textFld.delegate = self;

#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if ([string isEqualToString:@""] && range.length > 0) {
        //删除字符
        return YES;
    }else{
        if (textField.text.length + string.length > 11) {
            return NO;
        }else{
            return YES;
        }
    }
}

UITextView对输入内容的限制

注意:TextView是没有办法添加事件的,所有只能使用通知和代理的方法来限制TextView的内容长度。

方法一:发送通知
//创建一个UITextView对象
UITextView *textView = [[UITextView alloc] init];
//添加通知,一旦textView的内容改变就会调用设置的方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewChange:) name:UITextViewTextDidChangeNotification object:textView];

-(void)textViewChange:(NSNotification *)notification{
    UITextView *textView = (UITextView *)notification.object;
    //这里拿到的就是textView上面的内容
    NSLog(@"%@",textView.text);
    
    //限制长度为11位
    if (textView.text.length >= 11) {
        textView.text = [textView.text substringWithRange:NSMakeRange(0, 11)];
    }
}
方法二:代理的方式
//创建一个UITextView对象
UITextView *textView = [[UITextView alloc] init];
textView.delegate = self;

#pragma mark - UITextViewDelegate
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
    if ([text isEqualToString:@""] && range.length > 0) {
        //删除字符
        return YES;
    }else{
        if (textView.text.length + text.length > 11) {
            return NO;
        }else{
            return YES;
        }
    }
}

优化

textField.markedTextRange == nil
这个方法可以解决iOS中文输入下的长度限制问题

你可能感兴趣的:(限制输入内容)