1

我正在尝试检查输入到文本字段中的每个字符,然后尝试根据输入的最后一个字符打印一些内容。
这是我的代码:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string   
{
        if ([textField.text hasSuffix:@"1"]) {
            NSLog(@"Number : %@",textField.text);
        }
        else
        {
            NSLog(@"NOT ONE : %@",textField.text);
        }
return YES;
}  

这意味着,只有在输入 1 时,必须在日志中打印“NUMBER : 1”,否则必须打印“NOT ONE : a”或其他内容。

但我得到以下输出:

输入是:123456123

2012-12-21 17:41:14.365 vmsipPhone[1866:c07] NOT ONE : 
2012-12-21 17:41:16.125 vmsipPhone[1866:c07] Number : 1
2012-12-21 17:41:17.549 vmsipPhone[1866:c07] NOT ONE : 12
2012-12-21 17:41:19.037 vmsipPhone[1866:c07] NOT ONE : 123
2012-12-21 17:41:20.100 vmsipPhone[1866:c07] NOT ONE : 1234
2012-12-21 17:41:21.694 vmsipPhone[1866:c07] NOT ONE : 12345
2012-12-21 17:41:24.844 vmsipPhone[1866:c07] NOT ONE : 123456
2012-12-21 17:41:25.725 vmsipPhone[1866:c07] Number : 1234561
2012-12-21 17:41:26.836 vmsipPhone[1866:c07] NOT ONE : 12345612

问题是,当我输入 1 时出现第一个 NOT ONE
然后当我输入 2 时: Number : 1 出现
它就像一个字符的滞后。

有人可以解释为什么会这样。我做错了什么吗?

4

1 回答 1

4

在更改内容之前调用此方法。textField.text当您YES从该方法返回时,将应用更改。您应该创建一个临时字符串,使用范围和替换字符串对其进行修改,然后对其进行测试。

例如:

NSMutableString *testString = [NSMutableString stringWithString:textField.text];
[testString replaceCharactersInRange:range withString:string];
if ([testString hasSuffix:@"1"]) {
  // ...
于 2012-12-21T12:20:10.400 回答