0
votes

I need to open a modal window, which can open another modal window (or sheet). First window works fine, but second behaves strange.

This is how I open first window:

    RegisterDialog * registerDialog=[[RegisterDialog alloc] initWithWindowNibName:@"RegisterDialogMac"];
    NSWindow* window = [registerDialog window];
    [NSApp runModalForWindow:window];

This window behaves properly and responds to any buttons, I just added a bit of code to stop modal event loop after pressing on a red button:

- (void)windowWillClose:(NSNotification *)notification {
    [[NSApplication sharedApplication] stopModal];
}

Ok. Now I am opening the second dialog window if user press the "Register" button:

-(IBAction)registerPressed:(id)sender {
    RegistrationDialogMac* registrationDialog=[[RegistrationDialogMac alloc] initWithWindowNibName:@"RegistrationDialogMac"];   
    NSWindow* window = [registrationDialog window];
    [NSApp runModalForWindow:window];
}

This second dialog window works fine too, but is closed only if to press red button.

This is how "Cancel" button is processed:

-(IBAction)cancelPressed:(id)sender {
    [NSApp stopModal];
    [[self window] close];
}

After pressing it modal event loop is stopped, first dialog window becomes active, but second window still remains here. It is closed only if I press the red button. This is strange, as the first modal window is closed properly by the same code.

Ok. I tried to go different route and run the second dialog window as a sheet:

-(IBAction)registerPressed:(id)sender {
    RegistrationDialogMac* registrationDialog=[[RegistrationDialogMac alloc] initWithWindowNibName:@"RegistrationDialogMac"];
    NSWindow* window = [registrationDialog window];
    [self.window beginSheet: window
          completionHandler:^(NSModalResponse returnCode) {   }
    ];
}

(I turned off "Visible at launch" to correctly draw this sheet attached to the first dialog window) This way the second dialog window is drawn, but ignores all button presses. Graphically buttons are pressed, but aren't processed. This code:

-(IBAction)cancelPressed:(id)sender {
    NSLog(@"!");
    [[self window] close];
    //[NSApp endSheet:[self window]];  // may be this would be correct way to close sheet? Don't know as this method isn't run anyway
}

isn't executed at all, there is no a single "!" character in the log.

So I am doing something wrong. I actually almost have no any Mac coding experience, only Windows.

1

1 Answers

0
votes

Found that [self window] of the second dialog was nil, so it couldn't respond to close. Checked the .xib - and, yes, I forgot to connect the window outlet to the window itself. Fixed, and the window is closed correctly now.

This doesn't fix the problem of unresponding buttons when this second dialog is drawn as Sheet though.