0

我只是碰巧意识到,NSTimer当我离开ViewController类似按下后退按钮时,它仍在触发。终止该特定的适当方法是NSTimer什么?

4

4 回答 4

4

您可以在 viewDidDisappear 事件中处理它:

-(void)viewDidDisappear:(BOOL)animated {
    [myTimer invalidate];
}
于 2012-09-20T04:50:54.583 回答
0

您可以使用此方法终止您的NSTimer-

[timer invalidate]; //timer is your NSTimer

你可以invalidate这样timer-

一、方法

-(void)viewWillDisappear:(BOOL)animated
{
    [timer invalidate];
}    

2.方法

-(void)viewDidDisappear:(BOOL)animated
{
    [timer invalidate];
}    
于 2012-09-20T04:51:59.893 回答
0

这是我从你的问题中理解的:

您想在转到另一个 ViewController 时使计时器无效吗?

所以试试这个:

YourViewController *objController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
[self.navigationController pushViewController:objController animated:YES];
[timer invalidate]; //your timer object goes here

编辑:

或者如果你正在弹出 ViewConrtoller/Dismissing viewContoller,然后放

[timer invalidate];

在那段代码之后。

于 2012-09-20T05:03:11.510 回答
0

我建议您制作自定义导航控制器类,使用它可以在弹出视图控制器时发生事件。

#import "customNavigationController.h"
#import "SettingsTableController.h"

@implementation customNavigationController

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    if([[self.viewControllers lastObject] class] == [SettingsTableController class]){
        [[(SettingsTableController *)[self.viewControllers lastObject] timer] invalidate];
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration: 1.00];
        [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
                    forView:self.view cache:NO];

        UIViewController *viewController = [super popViewControllerAnimated:NO];

        [UIView commitAnimations];

        return viewController;
    } else {
        return [super popViewControllerAnimated:animated];
    }
}
@end

在这里, SettingsTableController 是具有 NSTimer 的类,因此您可以使计时器无效。这将有助于在呈现任何模态视图甚至推送视图控制器时不使计时器无效。

更多详细信息http://www.hanspinckaers.com/custom-action-on-back-button-uinavigationcontroller

于 2012-09-20T05:15:22.983 回答