1

我想编写一些代码来在UILabel文本更改时更新文本。我正在写一个小演示,例如:

- (IBAction)ButtonPressed:(id)sender {
    for(int i = 0; i < 100000; ++i)
    {
        [self.Label setText:[NSString stringWithFormat:@"%d",i]];
        [self.Label setNeedsDisplay];
    }
}

当我单击按钮时,标签仅更改一次为 99999,但我希望它从 0 到 99999 显示 99999 次。有人知道为什么代码不起作用吗?

提前致谢!

4

2 回答 2

3

setNeedsDisplay告诉系统您的视图想要被绘制,但它不会强制它发生。视图将在下一个绘制周期重新绘制,这发生在for循环完成之后。如果您希望所有 100,000 个更改都可见,则必须将标签更新延迟人类可感知的量。

于 2013-07-02T15:15:29.647 回答
2

上面的答案是正确的,但要详细说明,如果您确实想明显地更新标签的内容,您可以尝试以下操作

- (IBAction)ButtonPressed:(id)sender {
    for(int i = 0; i < 100000; ++i)
    {
        double delayInSeconds = 0.01 * i;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *     NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [self.Label setText:[NSString stringWithFormat:@"%d",i]];
            [self.Label setNeedsDisplay];
        }); 
    }
}

不过,出于您的目的,这可能无关紧要。一种更具触觉的方法是将按钮按下的次数存储在实例变量中,并在每次触摸时递增,并适当地设置标签值。

于 2013-07-02T15:41:12.397 回答