我正在使用NSTimer每秒更新倒计时标签(“5秒......”然后“4秒......”等),但每次更新标签时,它都会覆盖以前的输出:
这是更新标签的方法,该标签将每秒运行一次,直到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或空白,但我显然做错了什么。如何制作标签不会像这样相互覆盖?
答案 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--;
}