我的应用程序有3次浏览

在view1中,只有一个按钮(播放级别1)可以推到veiw2并更新view2中的titlelabel

当view2加载并出现时,计时器开始递减计数并更新view2本身中的另一个标签,view2也具有暂停计时器并按下到view3的按钮

在view3中,只有一个按钮会跳回到view2并恢复计时器

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

有什么帮助吗?

谢谢和亲切的问候。

view1.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


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.
    // e.g. 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.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

最佳答案

这是因为在view3back方法中,您创建了一个新的view2名称obj实例,并设置了paused=NO。但是当您弹出时,该objview2的瞬间不同。您需要做的是使用委托方法模式,以便view3view2中具有回调方法,以将paused设置为NO

有关委托方法模式的示例,请参见此SO中的示例。

编辑:示例回调代码:

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

在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];

}

关于ios - 弹出View2时如何恢复计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11377133/

10-13 02:55