仅在shouldChangeCharactersInRange之后调用方法返回yes

时间:2013-03-07 09:16:03

标签: iphone ios objective-c uitextfield

我有一个UITextField,下面有一个表格,显示了一个可供选择的项目列表(类似于下拉列表)。现在例如当我在文本字段中输入2(文本字段具有年份值)时,该表将显示所有字符串,其中2为子字符串。因此,当我输入2000时,它只会在表格中显示匹配的字符串2000。

现在,当我在文本字段中输入2000时,我想调用一个方法。一切正常,但我想只在我输入所有4位数字时才调用此方法,但是当我尝试输入第4位数字时调用该方法。

如何在2000年输入的地方执行此操作,并在输入第3个零后,在shouldChangeCharactersInRange返回Yes后调用该方法。

这是我的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];

    //if _filteredarray count==1 and substring and _filteredarray object at index 0 matches then call a method here

     return YES;
}

1 个答案:

答案 0 :(得分:3)

试试这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
     NSString *substring = [NSString stringWithString:textField.text];
     substring = [substring stringByReplacingCharactersInRange:range withString:string];
     if(substring.length == 4)
     {
          [textField resignFirstresponder];
          [self performSelector:@selector(functiontocall)withObject:nil afterDelay:0.8];
     }
     return YES;
}

上面的代码可能会给你一个想法

如果你输入2000的第四个字母,那么键盘将会消失(如果你想要你可以添加它,这将避免进一步输入值到文本字段),那么你可以看到第三个零点0.8秒和你需要的功能打电话会被叫。