zoukankan      html  css  js  c++  java
  • 限制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;
    }
  • 相关阅读:
    【BZOJ 1013】 [JSOI2008]球形空间产生器sphere
    【codeforces 779A】Pupils Redistribution
    【codeforces 779B】Weird Rounding
    【codeforces 779C】Dishonest Sellers
    Residential Gateway System for Home Network Service
    互联网大规模数据分析技术(自主模式)第五章 大数据平台与技术 第10讲 大数据处理平台Hadoop
    大数据系统基础(自主模式) 2.1大数据和云计算关系概述
    设计模式(10) 外观模式(FACADE)
    命令模式(Command Pattern)
    设计模式(三)建造者模式Builder(创建型)
  • 原文地址:https://www.cnblogs.com/zhanggui/p/5083338.html
Copyright © 2011-2022 走看看