5

ユーザーが入力したばかりの現在の入力文字を知りたいです。古い入力文字列と新しい入力文字列を比較することは機能しているようですが、それは私が最後に試したいことであるに違いありません。何か提案はありますか?iOS SDKには、これをより良い方法で実行できるメソッドがいくつかあると思います。

4

3 に答える 3

5
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

UITextFieldDelegateからあなたを助けるはずです。

これは、テキストを置き換えるためだけでなく、ユーザーがキーボードのキーを押すたびに呼び出されます。(範囲の長さは0になり、場所は現在の挿入位置になります)。

詳細については、ドキュメントを参照してください: http: //developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html#//apple_ref/doc/uid/TP40006991-CH3-SW9

于 2012-04-20T14:18:48.667 に答える
3

文字が入ってくるときに文字を比較したい場合は、

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];

-(void)compareInput
{
    if ([textField.text isEqualToString:compareString])
        NSLog(@"They're the same!");
}

デリゲートより:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

文字通り文字を比較したいだけなら、デリゲート メソッドで十分です。変数stringには、入力された文字が含まれます。

たとえば、ユーザーfooが UITextField に入力すると、上記のメソッドで次のようになります。

ユーザー タイプ: f、これは起こります:

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];

すぐに呼び出しcompareInput、手紙fは textField.text 経由で利用できます。

-(void)compareInput
{
    NSLog(textField.text); //prints `f`
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(textField.text); //prints nothing
    return YES;
    //after returning YES, textField.text will contain `f`
}

ユーザー タイプ: o、これは起こります:

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];

compareInputすぐに呼び出し、文字列foは textField.text を介して利用できます。

    -(void)compareInput
{
    NSLog(textField.text); //prints `fo`
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(textField.text); //prints `f`
    return YES;
    //after returning YES, textField.text will contain `fo`
}

よくわからないかもしれませんが、少しでも参考になれば幸いです!

于 2012-04-20T15:00:03.017 に答える
0

このメソッドは、UITextField の現在の入力を表示します

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *letters;
    if ([textField.text isEqualToString:@""]){
        letters = string;
    }else if ([string isEqualToString:@""]){
        if ([textField.text length] > 0) {
            letters = [textField.text substringToIndex:[textField.text length] - 1];
        }
    }else{
        letters = [textField.text stringByAppendingString:string];
    }

    NSLog(@"letters %@\n", letters);

    return YES;
}
于 2015-11-11T18:54:59.943 に答える