美文网首页iOS高阶UI相关
iOS实现银行卡输入每4位分隔

iOS实现银行卡输入每4位分隔

作者: botherbox | 来源:发表于2015-07-21 11:06 被阅读1684次
  • 首先要有一个TextField
@property (weak, nonatomic) UITextField *bankCardNumber;
  • 然后设置delegate
self.bankCardNumber.delegate = self;
  • 实现代理方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    if (textField == self.bankCardNumber) {
        // 4位分隔银行卡卡号
        NSString *text = [textField text];
        
        NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
        string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
        if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
            return NO;
        }
        
        text = [text stringByReplacingCharactersInRange:range withString:string];
        text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        NSString *newString = @"";
        while (text.length > 0) {
            NSString *subString = [text substringToIndex:MIN(text.length, 4)];
            newString = [newString stringByAppendingString:subString];
            if (subString.length == 4) {
                newString = [newString stringByAppendingString:@" "];
            }
            text = [text substringFromIndex:MIN(text.length, 4)];
        }
        
        newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];
        
        if ([newString stringByReplacingOccurrencesOfString:@" " withString:@""].length >= 21) {
            return NO;  
        }  
        
        [textField setText:newString];  
        
        return NO;
    }
    return YES;
}

相关文章

网友评论

    本文标题:iOS实现银行卡输入每4位分隔

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