Iphone 仅在shouldChangeCharactersRange之后调用方法返回yes

Iphone 仅在shouldChangeCharactersRange之后调用方法返回yes,iphone,ios,objective-c,uitextfield,Iphone,Ios,Objective C,Uitextfield,我有一个UITextField,下面有一个表,显示了要从中选择的项目列表(类似于下拉列表)。例如,当我在textfield中键入2(textfield有年份值)时,该表将显示所有以2作为子字符串的字符串。因此,当我输入2000时,表中只会显示匹配的字符串2000 现在,当我在textfield中输入完2000后,我想调用一个方法。一切正常,但我只想在我输入完所有4位数字后调用此方法,但在这里,当我尝试输入第4位数字时调用此方法 如果我在2000中键入,它将在shouldChangeCharact

我有一个UITextField,下面有一个表,显示了要从中选择的项目列表(类似于下拉列表)。例如,当我在textfield中键入2(textfield有年份值)时,该表将显示所有以2作为子字符串的字符串。因此,当我输入2000时,表中只会显示匹配的字符串2000

现在,当我在textfield中输入完2000后,我想调用一个方法。一切正常,但我只想在我输入完所有4位数字后调用此方法,但在这里,当我尝试输入第4位数字时调用此方法

如果我在2000中键入,它将在shouldChangeCharactersRange之后调用该方法,在输入第三个零后返回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;
}
试试这个

- (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年的第四个字母,那么键盘将消失(如果你想添加它,这将避免在textfield中进一步输入值),然后你可以看到第三个零0.8秒,你需要调用的函数将被调用

您可以使用UISearchBar进行搜索并实现其方法。这对您来说很容易。您可以计算string.length,如果它小于4,请不要调用该方法。我目前仅在执行此操作,但我只想在键入第4位后调用该方法,并且应更改CharactersRange并返回YES。这里,在接受第四位数字之前调用该方法。我的意思是,当我键入第四位数字0时,长度将为4,因此在shouldChangeCharactersInRange返回YES之前调用该方法。虽然设置了延迟,但由于我的方法包含将表中匹配的字符串转换为不同颜色的代码,因此延迟不受影响,因为shouldChangeCharactersRange尚未返回YES。。