Why isn't my sheet attached to the window it&#

2019-03-14 09:46发布

I have a NIB which contains two windows, one is the app's main window visible at launch and the other is a custom sheet (and therefore not visible at launch). When the sheet is required my controller calls:

[NSApp beginSheet: sheetWindow modalForWindow: mainWindow modalDelegate: self didEndSelector: @selector(didEndSheet:returnCode:contextInfo:) contextInfo: nil];

which displays the sheet window and starts a modal session, but the window has a standard Aqua title bar, is not 'connected' to the main window and can be moved around just like a regular window. Needless to say, this is not desirable :-). Why doesn't the sheet window "pop out" of the window it's run for, as sheets usually do when begun in this fashion?

I had wondered whether the fact that I was beginning the sheet inside the controller's -awakeFromNib might have an effect, so I moved the sheet to a button's action I could trigger later. This didn't change the behaviour. I haven't thought of anything else to try. I'm targeting the 10.5 SDK, using Xcode 3.1.

Edit: so it looks like I've created a modal dialog; sheets and app-modal dialogs are both started with the -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo: method. But how do I indicate that my window should be a sheet and not a modal dialog?

2条回答
贪生不怕死
2楼-- · 2019-03-14 09:53

This happened to me a couple of days ago:

  • You forgot to set the window outlet of your window controller (File's owner of the Nib file). As Indicated by Nathan, you may see that the -[NSWindowController window] method returns nil.
  • You must also uncheck the Visible at launch option of the sheet.
查看更多
我只想做你的唯一
3楼-- · 2019-03-14 10:12

If mainWindow is nil then the sheet will be displayed as a window/dialog.

查看更多
登录 后发表回答