我正在尝试实现一个更改按钮和标签(切换语言)标题的循环。
我的代码是:
- (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被解除时停止循环?
谢谢!
答案 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;
}];
希望它有所帮助。