0

文字列をユーザー入力の文字と比較したい。たとえば、ユーザーに「私はりんごを持っています」と入力させたいとします。入力をこの文字列と比較して、入力が正しいかどうかを確認します。間違った文字を入力すると、iPhone が振動してすぐに知らせます。問題は、スペースのような一部の文字がデリゲート メソッドを 2 回呼び出すことです。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

スペース キーを押すと、最初にテキストと ' ' を比較すると、結果は同じ文字であることがわかります。しかし、その後、文字列のインデックスを次の文字に進める必要があります。デリゲート メソッドが 2 回目に呼び出されると、iPhone が振動します。この問題を解決する方法についてのアイデアはありますか?

これが私のコードです:


strText = @"I have an apple.";
index = 0;

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSRange rg = {index, 1};
    NSString *correctChar = [strText substringWithRange:rg];
    if([text isEqualToString:correctChar])
    {
        index++;

        if(index == [strText length])
        {
            // inform the user that all of his input is correct
        }
        else
        {
            // tell the user that he has index(the number of correct characters) characters correct
        }
    }
    else {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        return NO;
    }

    return YES;
}

4

2 に答える 2

2

これを試して

- (void)textViewDidChange:(UITextView *)textView{
   if(![myStringToCompareWith hasPrefix:textView.text]){
    //call vibrate here
   }
}
于 2009-11-12T09:20:40.790 に答える
0

hasPrefix: を使用するという Morion の提案に基づいて構築すると、これがあなたが探しているソリューションだと思います。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    // create final version of textView after the current text has been inserted
    NSMutableString *updatedText = [NSMutableString stringWithString:textView.text];
    [updatedText insertString:text atIndex:range.location];

    if(![strTxt hasPrefix:updatedText]){
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        return NO;
    }

    return YES;
}
于 2009-11-12T09:43:48.663 に答える