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;
}