具有输入格式的 UItextfield

UItextfield with Input format

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

请查看我的回答

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

试试下面的代码:

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

您正在检查文本字段的旧文本长度。

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

应该是

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

这应该可以解决这两个问题。