Reputation: 22820
I'm trying to show 2 sheets (panels) one after the other. However, it looks like the first sheet doesn't have enough time to close before the second one shows up - so, it ends up in quite a mess.
Here's my code...
Macros
#define DRK_ALERT_YESNO_SHOW(X,Y,W) \
NSAlert* yesnoAlert = [NSAlert alertWithMessageText:X \
defaultButton:@"Yes" \
alternateButton:@"No" \
otherButton:nil \
informativeTextWithFormat:Y]; \
[yesnoAlert beginSheetModalForWindow:[[NSApp delegate] window] \
modalDelegate:self \
didEndSelector:W \
contextInfo:nil];
// Open File Sheet
#define DRK_OPENFILE_SHEET_BEGIN(X,Y,Z,A) NSOpenPanel *openPanel = [NSOpenPanel openPanel];\
[openPanel setAllowsMultipleSelection: NO];\
[openPanel setCanChooseDirectories:NO];\
[openPanel setCanCreateDirectories:NO];\
[openPanel setCanChooseFiles:YES];\
[openPanel setShowsHiddenFiles:YES];\
[openPanel setPrompt:Y];\
[openPanel setAllowedFileTypes:A];\
[openPanel beginSheetModalForWindow:X completionHandler:^(NSInteger result) {\
if (result == NSFileHandlingPanelOKButton) {\
NSString* Z = [openPanel filename];
#define DRK_OPENFILE_SHEET_END }\
}];
Actual code
- (IBAction)openDo:(id)sender {
DRK_ALERT_YESNO_SHOW(@"Are you sure you want to discard changes?",
@"You may lose any changes you have made to your current projects.",
@selector(shouldOpenDo:code:context:));
}
- (void)shouldOpenDo:(NSAlert*)alert code:(int)choice context:(void *)context
{
if (choice==NSAlertDefaultReturn)
{
DRK_OPENFILE_SHEET_BEGIN(([[NSApp delegate] window]), @"Open Project", filename,(@[@"txt"]));
// Yep, we can now open the file: filename
DRK_OPENFILE_SHEET_END
}
else
{
// nope, don't open anything
}
}
Any ideas?
Upvotes: 0
Views: 95
Reputation: 22820
OK, so that's all it took :
[[alert window] orderOut:nil];
just before DRK_OPENFILE_SHEET_BEGIN
.
Upvotes: 0