UIUItextfield输入类似银行卡号需要每四位加一个空格的实现

本文介绍如何实现UItextField在输入银行卡号时,每输入四位自动添加一个空格的功能。通过代理方法`textField:shouldChangeCharactersInRange:replacementString:`进行控制,确保输入符合格式要求。
摘要由CSDN通过智能技术生成

//  Copyright © 2016 GQ. All rights reserved.

//


#import "ViewController.h"


@interface ViewController ()<UITextFieldDelegate>


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

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

}

/**

 *  这个方法在textFieldtext被改变时调用,如果return NO,那么此次输入被忽略,YES,此次输入被添加

 *

 *  @param textField 记住这个是改变之前的textFiled

 *  @param range     指的是要输入字符串的位置,比如用户在字符串之间进行插入,比如

 

    range = {4, 2}

 *  @param string    本次输入的字符串

 *

 

 */

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

    

   BOOL returnValue = YES;

    NSMutableString* newText = [NSMutableStringstringWithCapacity:0];

    [newText appendString:textField.text];// 拿到原有text,根据下面判断可能给它添加" "(空格);

    

    NSString * noBlankStr = [textField.textstringByReplacingOccurrencesOfString:@" "withString:@""];

   NSInteger textLength = [noBlankStr length];

    

    

   if (string.length) {

       if (textLength < 25) {//这个25是控制实际字符串长度,比如银行卡号长度

           if (textLength > 0 && textLength %4 == 0) {

                newText = [NSMutableString stringWithString:[newText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

                [newTextappendString:@" "];

                [newTextappendString:string];

                textField.text = newText;

                returnValue = NO;//为什么return NO?因为textField.text = newText;text已经被我们替换好了,那么就不需要系统帮我们添加了,如果你ruturnYES的话,你会发现会多出一个字符串

            }else {

                [newTextappendString:string];

            }

        }else// 25长的话 return NO这样输入就无效了

            returnValue =NO;

        }

    }else// 如果输入为空,该怎么地怎么地

        [newText replaceCharactersInRange:rangewithString:string];

    }

    

   return returnValue;

}


@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值