Objective c CocoaTouch-切换UIViewController后如何停止循环?
我正在尝试实现一个循环来更改按钮和标签的标题(切换语言) 我的代码是:Objective c CocoaTouch-切换UIViewController后如何停止循环?,objective-c,xcode,cocoa-touch,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_a
- (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关闭时,如何停止循环
谢谢 这里使用的是递归,因此很可能进入无限循环。实现您所尝试的最好方法是使用NSTimer,它每X时间调用一个选择器。像这样: 声明计时器iVar:
NSTimer *timer;
在viewDidLoad上启动它
timer = [NSTimer scheduledTimerWithTimeInterval:4 target:self selector:@selector(labelToggle) userInfo:nil repeats:YES];
如果要停止切换,请调用:
[timer invalidate];
timer = nil;
若要在解除视图控制器时停止,这取决于解除视图控制器的方式,请尝试viewwilldemouse:
或viewdidemouse:
,或者如果视图控制器是一个模式,您将调用:
[self dismissViewControllerAnimated:YES completion:^{
[timer invalidate];
timer = nil;
}];
希望有帮助。它在ViewDidLoad中调用,没有显示循环。谢谢Dan。太好了。