我正在开发一款应用,我需要在短暂的间隔后更新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
没有定期更新。它只显示最后的文本。帮助我。
答案 0 :(得分:4)
在当前运行循环有机会完成之前,文本字段实际上不会更新。您的代码存在两个问题。
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
但需要更多设置。