2010-07-18 3 views
2

Мне интересно, есть ли способ узнать, не набрал ли пользователь UITextField на 2 секунды.Способ узнать, когда пользователь будет набирать данные по временному интервалу?

Если это не возможно, я хотел бы знать, если есть способ сказать, если пользователь сделал орфографические ошибки в текстовом поле - пример:

Там есть UITextView, который содержит объекты из NSArray и пользователь должен ввести текстовое поле и сопоставить содержимое в текстовом представлении. Если они ошибаются, они скажут им (мне нужна помощь). Примечание. Если пользователь правильно набирает строку, он автоматически принимает ее и переходит к следующей: кнопки для отправки строки нет - это делает это через текстовое поле.

ответ

1

Это возможно, но это потребует некоторой работы. Вам нужно будет проверить классы NSTimer и NSDate и протокол UITextFieldDelegate. В принципе, каждый раз, когда пользователь вводит что-то в текстовое поле, вы получаете способ делегирования. Этот метод затем кэширует текущее время (через [NSDate date]) и запускает таймер с двухсекундной продолжительностью. Когда срабатывает таймер, вы вызываете метод, который проверяет кешированный NSDate, чтобы увидеть, был ли последний ввод в текстовое поле за последние две секунды.

+0

Хммм спасибо. Знаете ли вы, что я мог бы достичь этого? (скажите, если пользователь вводит его неправильно) – Alex

+0

Если вы хотите перейти по маршруту таймера, вы можете сохранить некоторую работу с ответом Джеффа Келли. Чтобы узнать, правильно ли они печатают его, вы можете использовать метод делегата, чтобы сравнить правильный ответ с тем, что они набирают. Рассматривая общую ситуацию, я предлагаю начать с понимания делегатов текстового поля. Потому что все возможные решения будут связаны с этим. –

0

Ознакомьтесь с методами делегирования для UITextFile и UITextView. Существует несколько методов, которые вы можете реализовать, которые вызывают, когда пользователь изменяет состояние поля. Кроме того, вы можете отключить NSTimer, если вам нужно что-то определенное время.

2

Везде, где вы работаете с изменением текста, вы можете запустить NSTimer. Если до начала таймера вводится больше текста, вы можете вызвать -invalidate, чтобы отменить его, но если таймер срабатывает, то вы не знаете, что текст введен.

0

Зарегистрировать для изменения текста события в текстовом поле. Когда происходит изменение, создайте или обновите элемент таймера. Если таймер срабатывает, ваше время истекло. При очистке отключите таймер.

-(void) textFieldChanged:(id)sender { // UIControlEventEditingChanged 
    NSTimeInterval tooLong = 2.0; 

    if (myTimer) [myTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:tooLong]]; 
    else myTimer = [[NSTimer scheduledTimerWithTimeInterval:tooLong ... repeats:NO] retain]; 
} 
Смежные вопросы