2010-08-26 17 views
0

J'ai décidé d'utiliser une feuille d'alerte avec 2 boutons. Lorsque l'utilisateur clique sur le bouton Continuer, une feuille créée à partir d'une fenêtre doit être désactivée. La feuille descend et la fenêtre parent se ferme avec l'autre feuille. Le code que j'utilise est:Appel d'une feuille à partir d'une alerte provoque des problèmes de fenêtre étranges

- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(int  *)contextInfo 
{ 
if (returnCode == kOkayButtonCode) { 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *status = [defaults objectForKey:@"userStatus"]; 

    if (status == @"NO") { 
     [NSApp beginSheet:theSheet modalForWindow:window 
      modalDelegate:self didEndSelector:NULL contextInfo:nil]; 
    } 

    if (status == @"YES") { 

    } 
} 
if (returnCode == kCancelButtonCode) { 
    [NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.45]; 
    } 
} 

Quelqu'un peut-il y voir un problème?

Répondre

1

J'ai trouvé une solution de contournement avec une minuterie.

- (void)alertDidEnd:(NSAlert *)alert returnCode:(int)returnCode contextInfo:(int   *)contextInfo 
{ 
if (returnCode == kOkayButtonCode) { 
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
NSString *status = [defaults objectForKey:@"userStatus"]; 

if (status == @"NO") { 
     NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0.45]; 
     NSTimer *theTimer = [[NSTimer alloc] initWithFireDate:date 
                interval:1 
                target:self 
                selector:@selector(startSheet:) 
                userInfo:nil repeats:NO]; 

     NSRunLoop *runner = [NSRunLoop currentRunLoop]; 
     [runner addTimer:theTimer forMode: NSDefaultRunLoopMode]; 
     [timer2 release]; 
} 

if (status == @"YES") { 

} 
} 
if (returnCode == kCancelButtonCode) { 
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.45]; 
    } 
} 


- (void)startSheet:(NSTimer *)theTimer { 
[NSApp beginSheet:theSheet modalForWindow:window 
    modalDelegate:self didEndSelector:NULL contextInfo:nil]; 
}