2016-01-20 4 views
3

Я пытаюсь добавить - после использования введите для символов в UITextField. Ситуация заключается в добавлении номера кредитной/дебетовой карты. Я искал, но методы недействительны в соответствии с моими знаниями. Я установил предел 19 символов, 16 номеров карт и 3 - в методе delegate, как:
Как разместить символ между 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, 7 или 11. Добавить - в поле. Все карточки, которые будут введены, находятся в этом формате 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 'но все же на последнем символе он вызывает некоторые проблемы, такие как пользователь не может удалить символы и так мне другое поведение ненормального кода. –

Смежные вопросы