UITextField Проблемы длины NSString при форматировании NSString - PullRequest
0 голосов
/ 02 мая 2011

Я работаю над этим уже несколько дней, и с моими текстовыми полями происходят какие-то гулкие вещи ... и дошло до того, что мне нужно сделать шаг назад и надеяться, что кто-то получит свежую пару глаза могут пролить свет на ситуацию.

По сути, я делаю форматирование строки из 20 символов в наборы по 5, когда пользователь вводит после каждого 5-го символа, в строке которого появляется дефис, что прекрасно работает.

У меня есть кнопка отправки, которую нельзя просмотреть до тех пор, пока не будет введен 20-й символ, это также работает, но там, где она становится CRAZY! если вы удаляете обратно один символ, кнопка отправки все еще работает .. затем вы удаляете обратно еще один символ, и он не работает ... Я в растерянности, поскольку мои условия if не работают так, как они должны указывать == 23 символа, и вам нужно нажать одну из клавиш 24 раза, чтобы войти в это утверждение ... это не имеет никакого логического смысла.

В любом случае, если бы вы могли помочь мне с первым вопросом, который был бы великолепен, тогда, если у вас есть какие-либо идеи по второму вопросу, который был бы великолепен.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *separator = @"-";
    int seperatorInterval = 5; //how many chars between each hyphen
    NSString *originalString = [regTextField.text stringByReplacingOccurrencesOfString:separator withString:@""];


    if (textField.text.length == 23 && range.length == 0){
        return NO; // return NO to not change text
    }       
    if (![originalString isEqualToString:@""] && ![string isEqualToString:@""]) {

        NSString *lastChar = [regTextField.text substringFromIndex:[regTextField.text length] - 1];
        int modulus = [originalString length] % seperatorInterval;

        if (![lastChar isEqualToString:separator] && modulus == 0) {
                regTextField.text = [regTextField.text stringByAppendingString:separator];
        }
    }
    [self validateTextFields];
    return YES; //Keep accepting input from the user
}

//Validating text field to see if Submit button can be pressed or not
-(IBAction) validateTextFields {
    NSString *intString = [NSString stringWithFormat:@"%d", regTextField.text.length];
    NSLog(@"Starting %@", intString);
    if (regTextField.text.length < 22){
        [submitButton setEnabled:NO]; //enables submitButton
    } 
    else {
        regTextField.text = [regTextField.text substringToIndex:22];
        [submitButton setEnabled:YES]; //disables submitButton
    }
    intString = [NSString stringWithFormat:@"%d", regTextField.text.length];
    NSLog(@"Done %@", intString);
}

1 Ответ

0 голосов
/ 02 мая 2011

Вы должны добавить =, войдите в это, если оператор

if (regTextField.text.length <= 22){

или просто измените число на 23 в любом случае, оно должно работать

if (regTextField.text.length < 23){
...