0

我的应用程序有 3 个视图

在 view1 中只有一个按钮(播放级别 1)推送到 veiw2 并更新 view2 中的标题标签

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

在 view3 中只有一个按钮弹回 view2 并恢复你的计时器

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

请问有什么帮助吗?

谢谢和亲切的问候。

视图1.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.
    // 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

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
4

1 回答 1

1

这是因为在view3'sback方法中,您创建了view2nameobj和 set的新瞬间paused=NO。但这objview2您弹回的那一刻不同。您需要做的是使用委托方法模式,这样view3就会有一个回调方法来view2设置.pausedNO

有关委托方法模式的示例,请查看此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];

}
于 2012-07-07T17:42:35.110 回答