当popup到view2时如何恢复定时器

我的应用程序有3个意见

在view1中只有一个button(play level 1)推动veiw2并更新view2中的titlelabel

当view2加载并出现一个计时器开始倒计时并更新view2本身的另一个标签,也view2有button,暂停定时器,并推动view3

在view3中只有一个buttonpopup到view2并恢复定时器

我的问题是,当我从view3popupview2计时器仍然暂停

请帮忙吗?

感谢和亲切的问候。

view1.h

#import <UIKit/UIKit.h> @interface view1 : UIViewController -(IBAction)nextpage; @end 

view1.m

 #import "view1.h" #import "view2.h" @interface view1 () @end @implementation view1 -(IBAction)nextpage{ view2 *obj = [[view2 alloc] init]; [self.navigationController pushViewController:obj animated:YES]; [obj.leveltitle setText:@"Level"]; obj.time=10; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [self.navigationController setNavigationBarHidden:YES]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end 

view2.h

 #import <UIKit/UIKit.h> @interface view2 : UIViewController { int time; NSTimer *timer; BOOL paused; } @property (nonatomic, retain) NSTimer *timer; @property (readwrite, nonatomic) int time; @property (nonatomic) BOOL paused; @property (readwrite, retain) IBOutlet UILabel *leveltitle; @property (nonatomic, readwrite) IBOutlet UILabel *label; -(IBAction)back; -(IBAction)pause; @end 

view2.m

 #import "view2.h" #import "view3.h" @interface view2 () @end @implementation view2 @synthesize leveltitle, label; @synthesize time, timer; @synthesize paused; -(void)countDown2 { if (paused == NO && time>0) { time = time -1 ; view3 *obj = [[view3 alloc] init]; obj.sss = time; if (time == 0) { [timer invalidate]; } [label setText:[NSString stringWithFormat:@"%i",time]]; } } -(IBAction)back{ [self.navigationController popViewControllerAnimated:YES]; } -(IBAction)pause{ view3 *obj = [[view3 alloc] init]; [self.navigationController pushViewController:obj animated:YES]; paused = YES; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { paused = NO; timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countDown2) userInfo:nil repeats:YES]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end 

view3.h

 #import <UIKit/UIKit.h> @interface view3 : UIViewController { int sss; } @property (nonatomic) int sss; -(IBAction)back; @end 

view3.m

 #import "view3.h" #import "view2.h" @interface view3 () @end @implementation view3 @synthesize sss; -(IBAction)back{ view2 *obj = [[view2 alloc] init]; obj.paused=NO; obj.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(cont) userInfo:nil repeats:YES]; //[obj.timer fire]; [self.navigationController popViewControllerAnimated:YES]; } -(void)cont{ view2 *obj = [[view2 alloc] init]; obj.time = sss; if (obj.paused == NO && time>0) { obj.time = obj.time -1 ; if (obj.time == 0) { [obj.timer invalidate]; } [obj.label setText:[NSString stringWithFormat:@"%i",obj.time]]; } } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end 

这是因为在view3back方法中,您创build了view2 name obj的新时刻,并将paused=NO 。 但是当你回来的时候,这个obj并不是同一时刻。 你需要做的是使用委托方法模式,以便view3view2有一个callback方法来将paused设置为NO

有关委托方法模式的示例,请查看此SO的示例。

编辑:示例callback代码:

对这些代码进行添加/更改:

在view2.h中:

 #import "view3.h" @interface view2 : UIViewController <view3Delegate> 

在view2.m中:

 -(IBAction)pause{ view3 *obj = [[view3 alloc] init]; obj.delegate = self; //adding this line [self.navigationController pushViewController:obj animated:YES]; paused = YES; } -(void)setPausedValue:(BOOL)value //this is the new method callback from view3 to set paused value { paused = value; } 

在view3.h中:

 #import <UIKit/UIKit.h> @protocol view3Delegate <NSObject> -(void) setPausedValue:(BOOL)value; @end @interface view3 : UIViewController { int sss; } @property (assign) id <view3Delegate> delegate; @property (nonatomic) int sss; -(IBAction)back; @end 

在view3.m中:

 @implementation view3 @synthesize delegate; -(IBAction)back{ // view2 *obj = [[view2 alloc] init]; // obj.paused=NO; [self.delegate setPausedValue:NO]; //make callback and set value obj.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(cont) userInfo:nil repeats:YES]; //[obj.timer fire]; [self.navigationController popViewControllerAnimated:YES]; }