Периодически обновляйте UITextField

Я работаю над приложением, где мне нужно обновить текст внутри UITextField после коротких интервалов. Я получаю текст для обновления и интервалы в словаре. Я разбираю словарь и устанавливаю UITextField текст потом жду одну секунду.

- (void)startDisplay{
    for (NSDictionary *dictData in [dictTestData valueForKey:@"frames"]) {
        [_txtFieldDisplay setText:[dictData valueForKey:@"frame"]];
        [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
        [_txtFieldDisplay setText:@""];
    }
 }    

Но UITextField не обновляется регулярно. Это только показывает окончательный текст в конце. Помогите мне.

1 ответ

Решение

Текстовое поле не будет обновляться до тех пор, пока текущий цикл выполнения не сможет завершиться. Есть две проблемы с вашим кодом.

1) Вы спите в основной теме - ОЧЕНЬ плохо.

2) Вы сбрасываете текст до того, как изменение вступит в силу.

GCD был бы хорошим способом решить эту проблему:

- (void)startDisplay {
    float delay = 0.0;
    for (NSDictionary *dictData in [dictTestData valueForKey:@"frames"]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [_txtFieldDisplay setText:[dictData valueForKey:@"frame"]];
        });
        delay += 1.0;
    }

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [_txtFieldDisplay setText:@""];
    });
 }    

И, как упоминалось в "iMoses", другой подход может заключаться в использовании NSTimer но это требует больше настроек.

Другие вопросы по тегам