概述:
在开发中,为了与用户进行沟通,一般都会有让用户输入的东西,尤其是在登录的时候,也必须要让用户输入合乎规范的输入内容,因此我特地在网上查了一下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中文输入下的长度限制问题