美文网首页
小歪钱包三期-(银行卡号4位排布输入)

小歪钱包三期-(银行卡号4位排布输入)

作者: LeafRead | 来源:发表于2016-07-26 16:06 被阅读73次

1.输入银行卡号,银行卡号以4位隔开,输到一定位数时,光标回到已输字符中间再次输入,银行卡位数,便不会成4位隔开了;

解决:

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

{

if (textField) {

NSString* text = textField.text;

//删除

if([string isEqualToString:@""]){

//删除一位

if(range.length == 1){

//最后一位,遇到空格则多删除一次

if (range.location == text.length-1 ) {

if ([text characterAtIndex:text.length-1] == ' ') {

[textField deleteBackward];

}

return YES;

}

//从中间删除

else{

NSInteger offset = range.location;

if (range.location < text.length && [text characterAtIndex:range.location] == ' ' && [textField.selectedTextRange isEmpty]) {

[textField deleteBackward];

offset --;

}

[textField deleteBackward];

textField.text = [self parseString:textField.text];

UITextPosition *newPos = [textField positionFromPosition:textField.beginningOfDocument offset:offset];

textField.selectedTextRange = [textField textRangeFromPosition:newPos toPosition:newPos];

return NO;

}

}

else if (range.length > 1) {

BOOL isLast = NO;

//如果是从最后一位开始

if(range.location + range.length == textField.text.length ){

isLast = YES;

}

[textField deleteBackward];

textField.text = [self parseString:textField.text];

NSInteger offset = range.location;

if (range.location == 4 || range.location  == 9 ||range.location == 14 ||range.location == 19) {

offset ++;

}

if (isLast) {

//光标直接在最后一位了

}else{

UITextPosition *newPos = [textField positionFromPosition:textField.beginningOfDocument offset:offset];

textField.selectedTextRange = [textField textRangeFromPosition:newPos toPosition:newPos];

}

return NO;

}

else{

return YES;

}

}

else if(string.length >0){

//限制输入字符个数,限制位数

if (([self noneSpaseString:textField.text].length + string.length - range.length > 19) ) {

return NO;

}

[textField insertText:string];

textField.text = [self parseString:textField.text];

NSInteger offset = range.location + string.length;

if (range.location == 4 || range.location  == 9 ||range.location == 14 ||range.location == 19) {

offset ++;

}

UITextPosition *newPos = [textField positionFromPosition:textField.beginningOfDocument offset:offset];

textField.selectedTextRange = [textField textRangeFromPosition:newPos toPosition:newPos];

return NO;

}else{

return YES;

}

}

return YES;

}

-(NSString*)noneSpaseString:(NSString*)string

{

return [string stringByReplacingOccurrencesOfString:@" " withString:@""];

}

- (NSString*)parseString:(NSString*)string

{

if (!string) {

return nil;

}

NSMutableString* mStr = [NSMutableString stringWithString:[string stringByReplacingOccurrencesOfString:@" " withString:@""]];

if (mStr.length >4) {

[mStr insertString:@" " atIndex:4];

}if (mStr.length > 9) {

[mStr insertString:@" " atIndex:9];

}

if (mStr.length >14) {

[mStr insertString:@" " atIndex:14];

}

if (mStr.length >19) {

[mStr insertString:@" " atIndex:19];

}

return  mStr;

}

相关文章

  • 小歪钱包三期-(银行卡号4位排布输入)

    1.输入银行卡号,银行卡号以4位隔开,输到一定位数时,光标回到已输字符中间再次输入,银行卡位数,便不会成4位隔开了...

  • iOS 输入银行卡号每4位一起展示

    1.输入银行卡号 UITableView 有一个cell需要输入银行卡号,每输入4位后面加一个空格 2.显示银行卡...

  • iOS UITextField输入银行卡号校验设置

    简书 输入银行卡号要自限制?我有好方法! 校验银行卡号?我有好方法! 构建思路 选择合适的键盘 输入时进行调整 结...

  • 算法:Luhn算法

    背景 绑卡签约/支付时,想对用户输入的银行卡卡号做个简单的校验,以防止用户粗心输入错误的银行卡卡号。 算法介绍 L...

  • 区块链钱包

    钱包地址: 类比银行卡号,一个钱包对应一个私钥,一个人可同时拥有多张银行卡,所以可以拥有多个钱包地址以及钱包地址对...

  • 银行卡号编码规则及其应用

    绑卡时输入银行卡号后识别出银行和卡种是如何做到的?为什么能够在卡号输入有误时进行友好提示?本篇文章将为大家揭晓。 ...

  • Android中的EditText输入银行卡号四位空一格

    在项目开发有需要用户输入银行卡号,为了便于用户区分自己是否输入的正确,提升用户体验,特做了银行卡号四位一空格的操作...

  • iOS开发 - 银行卡号 16进制 输入格式化 placehol

    TextFieldDemo 点击查看Demo 以前项目中,有需要输入银行卡号的需求(每4位空格)所以 做了个小D...

  • iOS 15 RxSwift Tableview 记录一次BUG

    问题:银行名和银行卡号不同参数,提交到后台却是同一个。 实现:银行名是选择的,银行号是输入的,都使用了RX实现输入...

  • 银行卡拍照识别技术

    日常生活中相信你有过这种经历,在手机狭小的屏幕上输入银行卡卡号还是比较困难的。现在有一种“银行卡卡号识别”的技术,...

网友评论

      本文标题:小歪钱包三期-(银行卡号4位排布输入)

      本文链接:https://www.haomeiwen.com/subject/ncwnjttx.html