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 が
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 に答える