Проблемы с длиной строки UITextField при форматировании NSString

#iphone #if-statement #nsstring #uitextfield

#iPhone #if-оператор #nsstring #uitextfield

Вопрос:

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

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

У меня есть кнопка отправки, которую нельзя просмотреть, пока не будет введен 20-й символ, это тоже работает, но там, где это сводит с ума! если вы удалите обратно один символ, кнопка отправки все еще будет работать.. затем вы удаляете обратно еще один символ, и он не работает… Я в растерянности, поскольку мои условия операторов 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 amp;amp; range.length == 0){
        return NO; // return NO to not change text
    }       
    if (![originalString isEqualToString:@""] amp;amp; ![string isEqualToString:@""]) {

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

        if (![lastChar isEqualToString:separator] amp;amp; 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:

Вам нужно добавить = знак в этот оператор if

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

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

 if (regTextField.text.length < 23){