2016-07-18 1 views
1

J'ai un popup dans un contrôleur de vue personnalisé qui est présenté après 1 minute grâce à mon NSTimer.Comment définir un arrêt NSTimer si une certaine action est en cours?

Mon NSTimer code:

[NSTimer scheduledTimerWithTimeInterval:60.0f 
           target:self selector:@selector(methodB:) userInfo:nil repeats:YES];` 

La méthode qui révèle la fenêtre contextuelle

- (void) methodB:(NSTimer *)timer 
{ 
    //Do calculations. 
    [self showPopupWithStyle:CNPPopupStyleFullscreen]; 
} 

Je suis en train de régler le NSTimer d'arrêter de courir si le [self showPopupWithStyle:CNPPopupStyleFullscreen]; est actuellement ouvert, en cours d'exécution ou active.

Ensuite, je voudrais redémarrer le NSTimer si le contrôleur de vue popup n'est PAS ouvert, en cours d'exécution ou actif.

Toute aide, des échantillons ou des exemples seraient grandement appréciés!

Mon projet est écrit en Objective-C.

EDIT:

J'ai essayé les réponses dans le suggéré semble « peut-être même » réponse et ne pas travailler pour ce que je fais. Comment arrêter NSTimer?

+0

Possible duplication de [iPhone SDK: vérifier si un UIAlertView est en cours] (http://stackoverflow.com/questions/2528929/iphone-sdk-check-if-a-uialertview-is-showing) –

Répondre

1

Cela semble faire l'affaire.

@property (nonatomic, strong) CNPPopupController *popupController; 
- (void)_timerFired:(NSTimer *)timer; 

@end 

NSTimer *_timer; 

- (void)viewDidLoad { 
[super viewDidLoad]; 

if (!_timer) { 
    _timer = [NSTimer scheduledTimerWithTimeInterval:10.0f 
               target:self 
              selector:@selector(_timerFired:) 
              userInfo:nil 
              repeats:YES]; 
} 


} 

- (void)_timerFired:(NSTimer *)timer { 

if ([_timer isValid]) { 
    [self showPopupWithStyle:CNPPopupStyleFullscreen]; 
    [_timer invalidate]; 
} 
_timer = nil; 
    NSLog(@"ping"); 
} 

Si vous souhaitez redémarrer le temporisateur, ajoutez simplement ce code là où vous souhaitez que l'action redémarre.

if (!_timer) { 
     _timer = [NSTimer scheduledTimerWithTimeInterval:10.0f 
                target:self 
               selector:@selector(_timerFired:) 
               userInfo:nil 
               repeats:YES]; 
    } 

Espérons que cela aide! :)

+0

Remerciements toi! Cela a fonctionné! –