N'oubliez pas que si vous essayez de l'exécuter en tant que feuille "modale" (c'est-à-dire qu'elle prend en charge l'application jusqu'à ce que l'utilisateur la rejette), vous devrez pousser une nouvelle boucle d'exécution. Ce que vous avez fait est montré la feuille, et puis pas poussé une nouvelle boucle, de sorte que le système d'exploitation montre juste la feuille, voit qu'il n'y a aucune raison de la maintenir, et l'arrête ainsi et reprend l'exécution sur le prochain ligne:
Je fais généralement des feuilles de la manière suivante:
- (id)showPanelModalAgainstWindow: (NSWindow *)window
{
[[NSApplication sharedApplication] beginSheet: panelToShow
modalForWindow: window
modalDelegate: self
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
[[NSApplication sharedApplication] runModalForWindow: panelToShow];
if (m_returnCode == NSCancelButton) return nil;
}
- (void)sheetDidEnd:(NSWindow *)sheet
returnCode:(int)returnCode
contextInfo:(void *)contextInfo
{
UNUSED(sheet);
UNUSED(contextInfo);
m_returnCode = returnCode;
}
Ensuite, dans votre accepter et/ou annuler les routines bouton:
- (IBAction)continueButtonClicked:(id)sender
{
UNUSED(sender);
[[NSApplication sharedApplication] stopModal];
[createAccountWizardPanel orderOut: nil];
[[NSApplication sharedApplication] endSheet: createAccountWizardPanel
returnCode: NSOKButton];
}
Je suis sûr qu'il est aussi légèrement moins de code-y, mais je ne l'ai pas examiné en profondeur, car cette façon fonctionne parfaitement bien jusqu'ici ....
Les commentaires précédents sur la durée de vie du contrôleur et des objets du panneau sont également pertinent - assurez-vous de comprendre exactement quels objets vous avez besoin pour quelle durée de vie lors de l'affichage d'un panneau modal.
Spot sur! Merci beaucoup. –