定期更新UITextField

时间:2014-07-14 05:19:04

标签: ios objective-c ios7 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 个答案:

答案 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但需要更多设置。