如何恢复计时器时弹出视图2.



我的应用程序有 3 个视图

在视图 1 中,只有一个按钮(播放级别 1)推送到 VEIW2 并在视图 2 中更新标题标签

当 View2

加载并出现一个计时器开始倒计时并更新 View2 本身中的另一个标签时,View2 也有暂停计时器并推送到 View3 的按钮

在视图 3 中,只有一个按钮弹出回视图 2 并恢复计时器

我的问题是当我从 View3 弹出到 View2 时,计时器仍然暂停

请帮忙吗?

谢谢和亲切的问候。

视图1.h

#import <UIKit/UIKit.h>
@interface view1 : UIViewController


-(IBAction)nextpage;
@end

视图1.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.
    // e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end

视图2.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

视图2.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.
    // e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end

视图3.h

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

@end

视图3.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.
    // e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end

这是因为在view3back方法中,您创建了一个view2名称obj的新时刻并设置了paused=NO。 但那obj不是你回view2的那一刻。 您需要做的是使用委托方法模式,以便view3 view2中有一个回调方法来将paused设置为 NO

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

编辑:示例回调代码:

对代码进行以下添加/更改:

在视图中2.h:

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

视野中2.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;
}

在视图3.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

在视图3.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];
}

最新更新