2012-12-21 33 views
1

我试图检查每一个字符输入到文本字段,然后尝试根据最后输入的字符打印的东西。
这是我的代码:shouldChangeCharactersInRange:工作不正常

- (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”必须在日志中打印,否则“连一个也没有了”什么的,必须打印。

但我得到以下输出:

输入: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
后来,当我键入2:数字:1出现
它像一个字符的滞后。

有人能解释为什么会这样。我有什么不对吗?

+0

只是改变这一行,如果([字符串isEqualToString:@ “1”]),希望它可以帮助你 –

+0

@prateek但它是如何1周在下一次检查删除此行之后。 – Girish

+0

@Girish:以前你自己明白1发生了,所以再次检查是没有意义的。 –

回答

4

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

如:

NSMutableString *testString = [NSMutableString stringWithString:textField.text]; 
[testString replaceCharactersInRange:range withString:string]; 
if ([testString hasSuffix:@"1"]) { 
    // ... 
+0

优秀的答案,解释和解决方案都是完美的。谢谢。 – Vinayaka