使用for循环更改UIButton标题或设置UILabel文本

时间:2014-08-25 07:21:09

标签: ios for-loop uilabel

我正在使用此代码在循环运行时更改UIButtonUILabel的标题,但它无效。

- (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];


    }

}

日志正在打印值,但标题没有改变。我该如何解决这个问题?

3 个答案:

答案 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是全局整数值。