NSTimer每秒更新标签,但会覆盖以前的标签

时间:2014-09-15 02:26:42

标签: ios objective-c uilabel

我正在使用NSTimer每秒更新倒计时标签(“5秒......”然后“4秒......”等),但每次更新标签时,它都会覆盖以前的输出:

enter image description here

这是更新标签的方法,该标签将每秒运行一次,直到5秒倒计时结束:

- (void)timerRun {
UILabel *test = [[UILabel alloc] init];
test.text = [NSString stringWithFormat:@"%d seconds", secondsCount];
[self.audioPicker.view addSubview:test];

if (secondsCount == 0) {
    [countdownTimer invalidate];
    countdownTimer = nil;
}

    secondsCount = secondsCount - 1;
}

我已经尝试在循环开始时将标签设置为nil或空白,但我显然做错了什么。如何制作标签不会像这样相互覆盖?

4 个答案:

答案 0 :(得分:1)

不要在方法内部创建标签。

这将在每次通话时创建一个标签。

而是在班级声明它

答案 1 :(得分:1)

在timerRun方法之外创建标签,因为它一直在创建标签,因为timerRun被称为

答案 2 :(得分:1)

在timerRun

之外创建一个标签

只更新方法内的文字

// make sure the label is initialed before use
@property (strong, nonatomic) UILabel *test;

- (void)timerRun {
    test.text = [NSString stringWithFormat:@"%d seconds", secondsCount];
    if (secondsCount == 0) {
        [countdownTimer invalidate];
        countdownTimer = nil;
    }
    secondsCount = secondsCount - 1;
}

答案 3 :(得分:1)

喜欢这个

UILabel *test ;// instance variable
-(void)viewDidLoad
{
      text = [[UILabel alloc]initWithFrame:CGRectMake(50.0,200.0, 150.0,200.0)];// use your frame dimensions
      test.text = [NSString stringWithFormat:@"%d seconds", secondsCount];
      [self.audioPicker.view addSubview:test];
}
- (void)timerRun 
{

   test.text = [NSString stringWithFormat:@"%d seconds", secondsCount];

  if (secondsCount == 0) 
  {
    [countdownTimer invalidate];
    countdownTimer = nil;
  }

    secondsCount--;
}