gpt4 book ai didi

ios - 弹出 View 2时如何恢复计时器

转载 作者:行者123 更新时间:2023-11-29 04:33:28 25 4
gpt4 key购买 nike

我的应用程序有 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

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

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 的时刻并不相同。您需要做的是使用委托(delegate)方法模式,以便 view3view2 中有一个回调方法,将 paused 设置为

有关委托(delegate)方法模式的示例,请查看此 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 - 弹出 View 2时如何恢复计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com