2016-01-20 20 views
3

我試圖在UITextField中使用字符後輸入-。情況是增加一個信用卡/借記卡號碼。我已經搜索過,但根據我的知識,這些方法無效。我將限制設置爲19字符是16個卡號,並在delegate方法3 -爲:
如何在UITextField之間放置一個字符

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
NSUInteger length = [[textField text] length] - range.length + string.length; 
return textField.text.length <=19; 
} 

所以現在length是給我,如果UITextField的確切長度在那個時候。哪些工作正常現在我需要知道我應該寫什麼,如果此字段達到3,711在該字段中添加-。所有將要輸入的卡都採用這種格式xxxx-xxxx-xxxx-xxxx,所以這是我正在嘗試添加4個字符後添加-
我也在裏面delegate方法試過,但沒有奏效:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
     [formatter setGroupingSeparator:@"-"]; 
     [formatter setGroupingSize:4]; 
     [formatter setUsesGroupingSeparator:YES]; 

     NSString *num = textField.text ; 
     num= [num stringByReplacingOccurrencesOfString:@"" withString:@"-"]; 
     NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]]; 
     textField.text=str; 
     NSLog(@"%@",str); 

     return textField.text.length <=19; 
+0

你檢查這個.. http://stackoverflow.com/questions/12083605/ formatting-a-uitextfield-for-credit-card-input-like-xxxx-xxxx-xxxx-xxxx –

回答

1

試試這個在您的委託方法,這是另一種方法

if (textField.text.length < 19 && ![string isEqualToString:@""]) { 
    NSString *tempoText = textField.text; 
    tempoText = [tempoText stringByReplacingOccurrencesOfString:@"-" withString:@""]; 

    if (tempoText.length >= 4) { 
     NSMutableString *mutString = [tempoText mutableCopy]; 
     NSUInteger len = mutString.length/4; 

     int j = 0; 
     for (int i = 1; i <= len; i ++) { 

      NSUInteger index = 4 * i; 
      index += j; 
      j++; 
      [mutString insertString:@"-" atIndex:index]; 

     } 

     tempoText = mutString; 
    } 

    [textField setText:tempoText]; 
    return YES; 
} 
0

試試這個它會工作

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init] ; 
    if([string length]==0) 
    { 
     [formatter setGroupingSeparator:@"-"]; 
     [formatter setGroupingSize:4]; 
     [formatter setUsesGroupingSeparator:YES]; 
     [formatter setSecondaryGroupingSize:2]; 
     NSString *num = textField.text ; 
     num= [num stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
     NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]]; 
     [formatter release]; 
     textField.text=str; 
     NSLog(@"%@",str); 
     return YES; 
    } 
    else { 
     [formatter setGroupingSeparator:@"-"]; 
     [formatter setGroupingSize:2]; 
     [formatter setUsesGroupingSeparator:YES]; 
     [formatter setSecondaryGroupingSize:2]; 
     NSString *num = textField.text ; 
     if(![num isEqualToString:@""]) 
     { 
      num= [num stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
      NSString *str = [formatter stringFromNumber:[NSNumber numberWithDouble:[num doubleValue]]]; 
      [formatter release]; 
      textField.text=str; 
     } 

     //NSLog(@"%@",str); 
     return YES; 
    } 

    //[formatter setLenient:YES]; 

} 
+1

它的工作,但有一些問題,如用戶可以輸入超過16個字符,我通過返回<= 15 '但仍然在最後一個字符它會導致一些問題,如用戶不能刪除字符等我其他不正常的代碼行爲。 –

相關問題