1.电话号码(带3-3-4效果)

  1. //指定代理

     self.phoneTextField.delegate = self;
  2.    //当编辑改变的时候,进行字符校验
    [self.phoneTextField addTarget:self action:@selector(reformatAsPhoneNumber:) forControlEvents:UIControlEventEditingChanged];
  3. #pragma mark - 手机号码分隔
    /**
    * 3-3-4手机号码分隔
    */
    -(void)reformatAsPhoneNumber:(UITextField *)textField {
    //判断正确的光标位置
    NSUInteger targetCursorPostion = [textField offsetFromPosition:textField.beginningOfDocument toPosition:textField.selectedTextRange.start];
    NSString *phoneNumberWithoutSpaces = [self removeNonDigits:textField.text andPreserveCursorPosition:&targetCursorPostion];
    if([phoneNumberWithoutSpaces length] > 11) {
    //避免超过11位的输入
    [textField setText:_previousTextFieldContent];
    textField.selectedTextRange = _previousSelection;
    return;
    } NSString *phoneNumberWithSpaces = [self insertSpacesEveryFourDigitsIntoString:phoneNumberWithoutSpaces andPreserveCursorPosition:&targetCursorPostion]; textField.text = phoneNumberWithSpaces;
    UITextPosition *targetPostion = [textField positionFromPosition:textField.beginningOfDocument offset:targetCursorPostion];
    [textField setSelectedTextRange:[textField textRangeFromPosition:targetPostion toPosition:targetPostion]];
    } /**
    * 除去非数字字符,确定光标正确位置
    *
    * @param string 当前的string
    * @param cursorPosition 光标位置
    *
    * @return 处理过后的string
    */
    - (NSString *)removeNonDigits:(NSString *)string andPreserveCursorPosition:(NSUInteger *)cursorPosition {
    NSUInteger originalCursorPosition = *cursorPosition;
    NSMutableString *digitsOnlyString = [NSMutableString new]; for (NSUInteger i=0; i<string.length; i++) {
    unichar characterToAdd = [string characterAtIndex:i]; if(isdigit(characterToAdd)) {
    NSString *stringToAdd = [NSString stringWithCharacters:&characterToAdd length:1];
    [digitsOnlyString appendString:stringToAdd];
    }
    else {
    if(i<originalCursorPosition) {
    (*cursorPosition)--;
    }
    }
    }
    return digitsOnlyString;
    } /**
    * 将空格插入我们现在的string 中,并确定我们光标的正确位置,防止在空格中
    *
    * @param string 当前的string
    * @param cursorPosition 光标位置
    *
    * @return 处理后有空格的string
    */
    - (NSString *)insertSpacesEveryFourDigitsIntoString:(NSString *)string andPreserveCursorPosition:(NSUInteger *)cursorPosition{
    NSMutableString *stringWithAddedSpaces = [NSMutableString new];
    NSUInteger cursorPositionInSpacelessString = *cursorPosition; for (NSUInteger i=0; i<string.length; i++) {
    if(i>0){
    if(i==3 || i==7) {
    [stringWithAddedSpaces appendString:@" "];
    if(i<cursorPositionInSpacelessString) {
    (*cursorPosition)++;
    }
    }
    }
    unichar characterToAdd = [string characterAtIndex:i];
    NSString *stringToAdd = [NSString stringWithCharacters:&characterToAdd length:1];
    [stringWithAddedSpaces appendString:stringToAdd];
    }
    return stringWithAddedSpaces;
    } #pragma mark - UITextFieldDelegate -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    _previousSelection = textField.selectedTextRange;
    _previousTextFieldContent = textField.text;
    if ( textField == self.phoneHMDTextField &&range.location >= 11){
    return NO;
    }else {
    return YES;
    }
    }

二:监听代理方法(这样可以在if里通过判断,做几个textfield的限制输入)

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    if ( textField == self.phoneHMDTextField  && range.location >= 11){
return NO;
}else {
return YES;
}
}

三:

  //指定代理

    self.phoneTextField.delegate = self;

    //当编辑改变的时候,进行字符校验

    [self.phoneTextField addTarget:self action:@selector(reformatAsPhoneNumber:) forControlEvents:UIControlEventEditingChanged];

//监听字符改变的方法

- (void)textFieldDidChange:(UITextField *)textField
{
if (textField == self.textFieldName) {
if (textField.text.length > 15) {
        UITextRange *markedRange = [textField markedTextRange];
   if (markedRange) {
   return;
    }
//Emoji占2个字符,如果是超出了半个Emoji,用15位置来截取会出现Emoji截为2半
//超出最大长度的那个字符序列(Emoji算一个字符序列)的range
NSRange range = [textField.text rangeOfComposedCharacterSequenceAtIndex:15];
textField.text = [textField.text substringToIndex:range.location];
}
}
}

iOS 限制textField输入的长度的更多相关文章

  1. iOS 限制TextField输入长度(标准)

    iOS 限制TextField输入长度(标准) 网上有很多限制textField输入长度方法,但是我觉得都不是很完美,准确来说可以说是不符合实际开发的要求,因此在这里整理一下textField限制输入 ...

  2. iOS 学习 - 7.限制 TextField 输入字符长度

    #pragma mark -- TextField代理 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: ...

  3. iOS 限制TextField输入长度(支持删除)

    if (textField == _phoneTF) { //支持删除 && ) { return YES; } ) { _phoneTF.text = [textField.text ...

  4. iOS 限制TextField输入长度

    1 #import "MyInfoEditTableViewCell.h" @interface MyInfoEditTableViewCell()<UITextFieldD ...

  5. iOS对textField进行字符长度限制的办法

    在项目开发过程中,遇到这么一个需求,编辑标签时,输入的最大长度需要限制为24个字节. 查阅了一些材料,并参考了之前项目的相关处理办法,今天在这里总结一下解决方案. 1.写一个截取字符串的方法,将超长的 ...

  6. iOS TextField输入限制(限制长度、只能输入数字,只能输入数字字母……)

    项目中各个地方都会用到TextField,textField的输入也会有各种需求,各种限制,每次用到的时候要重写一遍这些限制,导致各种垃圾代码,各种重复,有一天,我终于看不下去了,于是把textFie ...

  7. iOS(Swift) TextField限制输入文本的长度(不是字数)

    最近做项目有一个特殊需求,就是需要限制一个TextField的输入文本的长度在一定范围内(注意,不是字数),上网查了一圈没有找到类似文章,这里把我的方法写进来,mark一下: 1.对TextField ...

  8. iOS textField输入金额的限制,小数点前9位,后面两位

    iOS textField输入金额的限制,小数点前9位,后面两位,如果不加小数点,最大位数是9位,加上小数点,最大位数是12位,超出最大位数可删除 - (BOOL)textField:(UITextF ...

  9. iOS 输入框限制输入字节数

    iOS中限制输入框文字长度的方法有好多,百度一下,最常用的是这种: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersI ...

随机推荐

  1. 比nerdtree更好的文件浏览器:vimfiler

    通过:VimFilerExplorer来打开一个文件浏览器 h:收起 t:展开 -:close 回车:进入或展开 空格:收起

  2. nodejs创建express+ejs项目

    很多同学跟着 node.js开发指南 学习用 express+ejs 创建项目的时候,却总是无法成功,如: 运行 以下命令去创建 express+ejs 创建项目 $ express -t ejs m ...

  3. C# DateDiff与DateAdd

    原文地址:http://www.wlm.so/Article/Detail/lmb49q5hxpqyi00000 刚刚在百度上搜C#里面的DateDiff,一看吓一跳,C#没有这个函数. 还有各种自定 ...

  4. windows官方多语言方案

    编写 Win32 多语言用户界面应用程序 Windows 2000 针对全球市场制定了新的增强支持标准,提供了许多国际化功能,例如完全支持 Unicode.预设支持数百种语言以及用于从右向左语言的镜像 ...

  5. 图片处理 Pillow

    Pillow 在python3下用PIL做图像处理 Python图像处理库:Pillow 初级教程 from PIL import Image im = Image.open('22.gif') pr ...

  6. SharePoint 2013 入门教程--系列文章

    转:http://www.cnblogs.com/jianyus/p/3381415.html 以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这 ...

  7. 开源项目ets_cache分析

    1 背景 当在程序中,有大量的数据需要读写,数据库的响应会延迟,甚至阻塞.缓存可以缓解对数据库访问的压力,而且在内存中数据的读写要比读写硬盘上的数据快. 2 目的 ets_cache是用erlang实 ...

  8. U-boot mkimage指定Linux内核地址时的两种方式

    http://blog.csdn.net/embededswordman/article/details/6704197 uImage的制作是使用的u-boot工具mkimage,build完u-bo ...

  9. CXF之二(CXF发布webService)

    Apache CXF提供了用于方便地构建和开发WebService的可靠基础架构.它允许创建高性能和可扩展的服务,可以部署在Tomcat和基于spring的轻量级容器中,也可以部署在更高级的服务器上, ...

  10. 软件测试模型汇总-V模型,W模型,X模型,H模型

    V模型 在软件测试方面,V模型是最广为人知的模型,尽管很多富有实际经验的测试人员还是不太熟悉V模型,或者其它的模型.V模型已存在了很长时间,和瀑布开发模型有着一些共同的特性,由此也和瀑布模型一样地受到 ...