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