开发者社区> 我不是掌柜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

限制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;
}
复制代码

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Compose 自定义TextField实现自定义的输入框
Compose 自定义TextField实现自定义的输入框
146 0
CSS 自适应内容宽度的输入框
CSS 自适应内容宽度的输入框
244 0
北京大学肖臻老师《区块链技术与应用》公开课笔记7——比特币的挖矿难度调整
北京大学肖臻老师《区块链技术与应用》公开课笔记7——比特币的挖矿难度调整
111 0
获取 UIElement 相对于屏幕原点所占用的矩形区域
原文:获取 UIElement 相对于屏幕原点所占用的矩形区域 // 演示如何获...
800 0
C实现两个文件的内容输出到同一个屏幕
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/48244785 编制一个程序,实现将两个文件的内容同时显示在屏幕上,并且最左边的第1-30列 显示文件1的内容,右边第41-70列显示文件2的内容;第75-76列显示两文件该行字符总和,其余列显示空白符。
726 0
+关注
我不是掌柜
从小记性差,所以把东西都记下来。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载