Пользовательский ввод в UITextView вызывает метод делегата дважды? - PullRequest
0 голосов
/ 12 ноября 2009

Я хочу сравнить строку с вводимым пользователем символом. например Я хочу, чтобы пользовательский ввод "У меня есть яблоко". и сравните ввод с этой строкой, чтобы увидеть, является ли его ввод правильным. Когда он введет неправильный символ, iphone будет вибрировать, чтобы немедленно сообщить ему. Проблема в том, что я нахожу некоторые символы, такие как пробел, дважды вызовет метод делегата

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

Когда я нажимаю клавишу пробела, в первый раз, когда я сравниваю текст с '', результат покажет мне, что это один и тот же символ. Но после этого я должен продвинуть индекс строкового символа к следующему. И во второй раз, когда вызывается метод делегата, 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;
}

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

попробуйте

- (void)textViewDidChange:(UITextView *)textView{
   if(![myStringToCompareWith hasPrefix:textView.text]){
    //call vibrate here
   }
}
0 голосов
/ 12 ноября 2009

Основываясь на предложении Мориона использовать hasPrefix :, я думаю, что это решение, которое вы ищете:

- (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...