0

UILabel的不是每次都刷新,而是仅刷新最后一个值。我想打印UILabel.

for (int i=0; i<4; i++) {
    lblText.text=[NSString stringWithFormat:@"%i",i];
sleep(1.2);
}
4

4 回答 4

3

您正在覆盖这些值。您需要创建一个新数组,每次迭代都附加新值。

而且,不要在主线程中使用睡眠。这就是 UI 阻塞

于 2013-03-21T12:05:25.707 回答
2

如果你想改变标签文本间隔一段时间,为什么不使用NSTimer

    _timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(changeText) userInfo:nil repeats:YES];
    _loopTime = 0;


- (void)changeText
{
    lblText.text=[NSString stringWithFormat:@"%i",_loopTime++];
    if(_loopTime >= 3)
    {
        [_timer invalidate];
    }
}
于 2013-03-21T12:08:33.640 回答
1

不要sleep()在主线程中使用。因为它会冻结 UI。使用performSelector: afterDelay:which 将调用函数(您自己的)来更新标签中的文本

于 2013-03-21T12:04:15.240 回答
1

阿米特..我不确定,但据我所知,iOS 会在两种方法执行之间重绘屏幕。并且只重绘最新的值。实现计数器。您需要正确的方法并启动计时器,如下所示。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.2
                                                            target:self
                                                          selector:@selector(counter:)
                                                          userInfo:[NSNumber numberWithInt:i]
                                                           repeats:YES];

这是一种反方法。

-(void) counter:(NSNumber)count
{

    if(count == 4)
    {
      [timer invalidate]; timer = nil;
    }
    lblText.text=[NSString stringWithFormat:@"%i",count];
    //increment the counter
    i++;
}

希望这可以帮助。

于 2013-03-21T12:13:32.323 回答