2010-06-02 74 views
1

在我第一次在三视图 - 控制调用计时器这样如何从另一个视图控制器调用NStimer形式的一个viewcontroller?

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(targetMethod) userInfo:nil repeats:NO]; 

然后定时器称为targetMethod

-(void)targetMethod 
{ 
First * sVC = [[First alloc] initWithNibName:@"First" bundle:[NSBundle mainBundle]]; 
[self presentModalViewController:sVC animated:YES]; 
[sVC release]; 
[timer invalidate]; 
} 

首先视图 - 控制开.. 在第一视图控制器有一个button.In按钮操作 我写了

- (IBAction) Action:(id)sender 
{ 
[self dismissModalViewControllerAnimated:YES]; 
Third *BVC=[[Third alloc]init]; 
    [Bvc TimerStart];  //Timestart is function i start timer in this function.. 
//i want to call Third viewcontroller timer function this place 
} 

定时器启动..但视图没有打开(第一个)vi ewcontroller .......

请帮我......

+0

我不明白你想用此BVC对象或什么的那点做什么方法是。你能进一步解释吗? – 2010-06-02 17:59:06

回答

1

巴拉,

放置的NSTimer对象在App代表.h文件中,包括在哪里.h文件中你使用计时器。这将允许NSTimer成为一个全局计时器,您可以从包含应用程序委托头文件的任何其他视图调用该计时器。

在应用程序委托.h文件中(在适当的地方):

NSTimer *delayTimer; 

@property (nonatomic, retain) NSTimer *delayTimer; 

合成这种在应用程序委托.m文件(记得要释放它的dealloc中):

@synthesize delayTimer; 

然后在你使用定时器的任何视图中,像这样访问它:

// get global variable 
SomeNameHereAppDelegate *mainDelegate = (SomeNameHereAppDelegate *)[[UIApplication sharedApplication] delegate];  

mainDelegate.delayTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(targetMethod) userInfo:nil repeats:NO]; 

然后,当你想invali从某处日起,你只是这样做:

[mainDelegate.delayTimer invalidate]; 
mainDelegate.delayTimer = nil; 
0

如果,如果我需要有一个倒计时器应该认为controllers.do之间共享,我必须让它在应用程序的委托其中剩余秒也可以是一个伊娃在应用程序代表财产? 在这种情况下,我会更新剩余秒

+0

我解决了这个问题,当我第一次启动定时器时,将定时器的endtimestamp保存为nsuserdefaults。当viewcontroller加载它的视图时,它从用户默认值中读取endtimesamp并根据剩余时间启动它自己的定时器。 – 2012-08-01 10:28:19

0

在AppDelegate.h

@property int timePassed; 

在AppDelegate.m

@synthesize timePassed; 

在ViewController.h

后发布从计时器处理程序通知
@property (weak, nonatomic)NSTimer *timer; 
@property (weak, nonatomic) IBOutlet UILabel *time; 

在ViewController.m

- (void)viewWillAppear:(BOOL)animated{ 

[super viewWillAppear:animated]; 
AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; 
delegate.timePassed = 180; 
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(TimePasses) userInfo:nil repeats:YES];; 
} 


-(void) TimePasses{ 
AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; 
delegate.timePassed = delegate.timePassed - 1; 
NSLog(@"TimePasses %d", delegate.timePassed); 
int minuts = delegate.timePassed/60; 
int seconds = delegate.timePassed - (minuts * 60); 

NSString *timerOutput = [NSString stringWithFormat:@"%2d:%.2d", minuts, seconds]; 
time.text = timerOutput; 
} 

在SecondViewController.h

@property (weak, nonatomic)NSTimer *timer; 
@property (weak, nonatomic) IBOutlet UILabel *time; 

在SecondViewController.m

- (void)viewWillAppear:(BOOL)animated{ 

[super viewWillAppear:animated]; 
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(TimePasses) userInfo:nil repeats:YES];; 
} 

-(void) TimePasses{ 
AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate]; 
NSLog(@"TimePasses in 2 %d", delegate.timePassed); 
int minuts = delegate.timePassed/60; 
int seconds = delegate.timePassed - (minuts * 60); 

NSString *timerOutput = [NSString stringWithFormat:@"%2d:%.2d", minuts, seconds]; 
time.text = timerOutput; 
} 
相关问题