带输入格式的UItextfield

时间:2016-11-01 07:15:11

标签: ios objective-c uitextfield uitextfielddelegate

我有2个问题

1)如果textfield输入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次(如更改文本框)

enter image description here

在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 个答案:

答案 0 :(得分:1)

请检查我的回答

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

答案 1 :(得分:1)

尝试以下代码:

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

答案 2 :(得分:1)

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

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

应该是

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

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