限制UITextField输入内容的长度

简介:

一、前言

  今天做手机号输入限制长度,例如我的textfield只能输入11位,如果再多输入的话就不再textfield中显示,只显示11位的手机号。

  如果用ReactiveCocoa的话,这个很好解决。但是项目中没有引入该类库,所以只能手动的取完成了。

二、实现原理

  先看代码:

复制代码
//
//  ViewController.m
//  Test
//
//  Created by zhanggui on 15/12/28.
//  Copyright © 2015年 zhanggui. All rights reserved.
//

#import "ViewController.h"
@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextField *myTextField;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:) name:@"UITextFieldTextDidChangeNotification" object:self.myTextField];
    self.myTextField.placeholder = @"只能输入11位哦";

    // Do any additional setup after loading the view, typically from a nib.
}

#pragma mark - UITextFieldDelegate
-(void)textFiledEditChanged:(NSNotification *)obj{
    UITextField *textField = (UITextField *)obj.object;
    
    NSString *toBeString = textField.text;
    if (toBeString.length-1 > 10 && toBeString.length>1) {
        textField.text = [toBeString substringToIndex:11];
    }
}
@end
复制代码

   做法如下:

  首先,我们需要添加一个通知,这个通知的name是:UITextFieldTextDidChangeNotification 。我们可以点击这个名字进去,会发现

UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;

  这个是在UITextField.h中定义的一个常量字符串,他的作用如下:

    通知观察者textField中的内容改变了,受影响的textField就存储在通知的object参数中。(Notifies observers that the text in a text field changed. The affected text field is stored in the object parameter of the notification.

  这样的话,我们就可以通过通知来控制了。当我们每次输入字符到textField中的时候,都会在通知的方法中进行监听,我就在里面判断输入的字符串的长度是否满足需要的条件,如果满足了条件(我这里的条件是11位),就让textField的text始终等于我要限制的长度。以此来完成自己的需求。

 =========== =========== =========== =========== =========== =========== ===========

2015年12月31日下午5:57更新

另一个简单的方法:代码如下:

复制代码
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    if ([toBeString length] > 11) {
        textField.text = [toBeString substringToIndex:11];
        return NO;
    }    return YES;
}
复制代码
相关文章
如何获取与设置光标在input框的位置
如何获取与设置光标在input框的位置
如何获取与设置光标在input框的位置
|
2月前
|
JavaScript
限制input框中的输入类型及长度
限制input框中的输入类型及长度
|
8月前
[虚幻引擎 UE5] EditableText(单行可编辑文本) 限制只能输入数字并且设置最小值和最大值
本蓝图函数可以格式化 EditableText 控件输入的数据,让其只能输入一定范围内的整数。
217 0
编写一个满足下面要求的程序:创建一个由100个随机选取的整数构成的数组 提示用户输入数组的下标,然后显示对应的元素值,如果指定的下标越界,则显示消息“Out of Bounds”
编写一个满足下面要求的程序:创建一个由100个随机选取的整数构成的数组 提示用户输入数组的下标,然后显示对应的元素值,如果指定的下标越界,则显示消息“Out of Bounds”
138 0
NSString中如何正确判断包含一个变量字串NSString
NSString中如何正确判断包含一个变量字串NSString
62 0
用正则表达式限制input输入框只能输入整数的一段简单代码
要实现input框只能输入正整数,如果检测到输入其他类型的数据就直接为0;代码如下:
326 0
iOStextField/textView在输入时限制emoji表情的输入
又遇到输入框输入表情的情况了,之前写了一篇文章“UITextView/UITextField检测并过滤Emoji表情符号”http://www.jianshu.com/p/90d68e7e5d53,但是总觉得那两种方式都各有弊端,这次又遇到之后,仔细考虑了下之后,想到了用两种方式组合在一起使用,测试结果暂时没什么问题,在输入时就限制了emoji表情输入,完全符合需求。在此贴出代码,如果有什么问题,欢迎指正!
如何更好的限制一个UITextField/UITextView的输入字数
要限制一个UITextField/UITextView的输入字数,首先想到的应该是通过UITextFieldDelegate/UITextViewDelegate 的代理方法来限制,那么如何来更好的限制输入字数呢,下面我们来看看:
|
数据安全/隐私保护
UITextView/UITextField检测并过滤Emoji表情符号
UITextView/UITextField检测并过滤Emoji表情符号
|
数据安全/隐私保护
UGUI系列-InputField限制输入个数以及限制输入格式
UGUI InputField 组件是一个用来管理输入的组件 我们通常用来输入用户的账号,密码,或者聊天时输入文字,等等输入逻辑… 在使用中,我们常常要对输入的字符串进行限制,最常见的限制有个数和格式