Периодически обновляйте 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
но это требует больше настроек.