我正在使用此代码在循环运行时更改UIButton
或UILabel
的标题,但它无效。
- (IBAction)do2:(id)sender
{
for (float i = 0; i < 1000; i = i + 0.5) {
NSLog(@"%f", i);
[self.Lbl1 setText:[NSString stringWithFormat:@"%f", i]];
[self.Btn1 setTitle:[NSString stringWithFormat:@"%f", i] forState:UIControlStateNormal];
}
}
日志正在打印值,但标题没有改变。我该如何解决这个问题?
答案 0 :(得分:1)
试试这个。您的代码问题是您的标签,按钮会使用数组的最后一个值进行更新。以下代码可以解决您的问题
- (IBAction)do2:(id)sender
{
for (float i = 0; i < 1000; i = i + 0.5) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.Lbl1 setText:[NSString stringWithFormat:@"%f", i]];
[self.Btn1 setTitle:[NSString stringWithFormat:@"%f", i] forState:UIControlStateNormal];
});
}
}
答案 1 :(得分:0)
如果您希望在应用程序运行时像计时器应用程序一样进行更改,则应使用Timer:
NSTimer *timer;//Declare it as a instant variable somewhere
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(changeText)
userInfo:nil
repeats:YES];
定义在每个区间中运行的方法:
- (void)changeText
{
count++;
[self.Lbl1 setText:[NSString stringWithFormat:@"%f", count]];
[self.Btn1 setTitle:[NSString stringWithFormat:@"%f", count] forState:UIControlStateNormal];
if (count >= 1000)
{
[timer invalidate];
}
}
答案 2 :(得分:0)
原因是while循环执行速度很快,你只能在完成代码后看到标题发生变化。
如果您想查看标题更改,请尝试使用NSTimer并从计时器调用的函数更改标题。例如 -
NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(changeTitle) userInfo:Nil repeats:YES];
在changeTitle方法中 -
-(void)changeTitle{
if (GlobalCount <= 1000) {
GlobalCount++;
NSLog(@"%f", GlobalCount);
[self.Lbl1 setText:[NSString stringWithFormat:@"%f", i]];
[self.Btn1 setTitle:[NSString stringWithFormat:@"%f", i] forState:UIControlStateNormal];
}else{
[myTimer invalidate];
}
}
GlobalCount是全局整数值。