UItextfield с форматом ввода

У меня 2 вопроса

1) Если в текстовое поле вводится 10 цифр, то после нажатия 10-й цифры вызывается функция (myFunction), у меня есть код ниже, чтобы зафиксировать длину 10 цифр, код ниже, когда я нажимаю 11-ю цифру.

#define MAX_LENGTH 10

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

    if (textField.text.length >= MAX_LENGTH && range.length == 0)
    {
      [self myFunction];//not working it works when 11th time key is press
        return NO; // return NO to not change text
    }
  return YES;

}


-(void) myFunction
{
// do my stuff here 
}

2) Мой второй вопрос касается формата ввода кредитной карты с несколькими текстовыми полями. у меня есть 3 текстовых поля, в которых я должен ввести 4 цифры каждое, ниже мой код работает нормально, но он также работает при печати 5-й раз (например, изменить текстовое поле)

введите описание изображения здесь

в viewDidLoad

self.txt_box1.tag=1;
self.txt_box2.tag=2;
self.txt_box3.tag=3;


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
     if ((textField.text.length >= 4) && (string.length > 0))
    {

        NSInteger nextTag = textField.tag + 1;
        // Try to find next responder
        UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
        if (! nextResponder)
        {
            [nextResponder resignFirstResponder];
            [self myFunction];
        }

        if (nextResponder)
            // Found next responder, so set it.
            [nextResponder becomeFirstResponder];

        return NO;
    }
    return YES;
}

3 ответа

Решение

Пожалуйста, проверьте Мой ответ

- (void)viewDidLoad
{
    [textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}

- (void)textFieldDidChange:(UITextField *)textField
{
    if (textField.text.length > MAX_LENGTH) 
    {
        textField.text = [textField.text substringToIndex:MAX_LENGTH];
    }
}

Вы проверяете текстовые поля старой длины текста.

if ((textField.text.length >= 4) && (string.length > 0))

должно быть

if ((string.length >= 4) && (string.length > 0))

Это должно решить обе проблемы.

Попробуйте код ниже:

NSString* fullString = [textField.text stringByReplacingCharactersInRange:range withString:string];

if (fullString.length >= MAX_LENGTH)
{
  [self myFunction];//not working it works when 11th time key is press
    return NO; // return NO to not change text
}
return YES;

То же самое для № 2.

NSString* fullString = [textField.text stringByReplacingCharactersInRange:range withString:string];

if (fullString.length > 4)
{
   // any code
    return NO;
}
return YES;
}
Другие вопросы по тегам