Cocoa Touch - 切换视图控制器后如何停止循环?

时间:2014-07-26 08:56:01

标签: objective-c xcode cocoa-touch

我正在尝试实现一个更改按钮和标签(切换语言)标题的循环。

我的代码是:

- (void)labelToggle
{
    self.label.text = @" ";
    text = textValue[self.idx]; 
    self.idx++;
    [button setTitle:text forState:UIControlStateNormal];
    self.label.text = textValue[self.idx];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self labelToggle];

    });
}

更新

循环在ViewDidLoad中调用,如下所示:

textValue= [[NSArray alloc] initWithObjects:@"Add", @"Προσθέστε", nil];
 self.idx = 0;
[self labelToggle];

idx设置在这里:

- (void)setIdx:(NSInteger)idx
{
    _idx = MAX(0, MIN(idx, idx % [textValue count]));
}

如何在ViewController被解除时停止循环?

谢谢!

1 个答案:

答案 0 :(得分:1)

您在这里使用递归,因此您可能会进入无限循环。实现目标的最佳方法是使用NSTimer,每隔X个时间调用一个选择器。像这样:

声明一个计时器iVar:

NSTimer *timer;

在viewDidLoad

上启动它
timer = [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(labelToggle) userInfo:nil repeats:YES];

当您想要停止切换时,请致电:

[timer invalidate];
timer = nil;

要在取消视图控制器时停止,取决于您解除视图控制器的方式,尝试viewWillDisappear:viewDidDisappear:,或者如果您的视图控制器是您打算调用的模态:< / p>

    [self dismissViewControllerAnimated:YES completion:^{
        [timer invalidate];
        timer = nil;
    }];

希望它有所帮助。