2

函数NSBeginAlertSheet(...)具有我需要的所有事件,尤其是didDismiss:回调,但我真的需要能够对我想要的任何窗口执行相同的工作表操作,所以我发现了这个通知:

NSWindowDidOrderOffScreenAndFinishAnimatingNotification

每当关闭工作表并完成动画时都会发布哪个,我的问题是我可以使用它吗?或者,还有更好的方法?

我使用 ARC 并从.xib使用NSWindowController.

总的来说,我需要将一个窗口显示为工作表并捕获所有事件。

4

3 回答 3

2

有什么问题

- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo

这调用了didEndSelector应如下所示的可选:

- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;

这都在NSApplication文档中。结束工作表有两种方法:

- (void)endSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode
- (void)endSheet:(NSWindow *)sheet

所以你可以在调用之前做任何你想做的事情,endSheet:或者你可以在sheetDidEnd:方法中。

编辑:

是一个示例项目,显示调用[window orderOut:self]之后动画就完成了,你可以做你想做的事情。

于 2013-07-26T22:05:01.477 回答
0

NSWindowDidEndSheetNotification每当工作表完成动画制作时就会发布。

于 2013-07-22T17:09:53.460 回答
0

beginSheet:completionHandler:从 10.9 开始,正确的方法是调用NSWindow对象。

这种方法的优点是,完成处理程序是一个块,因此只要工作表仍然显示,它就可以保持所有需要的对象处于活动状态,一旦工作表完成并且块已经执行,块本身就是释放,因此它保持活动的所有对象也是如此。

为了确保一个块保持对象存活,请使用该块中的对象,或者如果无法以有意义的方式使用它们,请将它们全部放入该数组NSMutableArray的块调用中;removeAllObjects这需要块来保持数组处于活动状态,而数组保持其余部分处于活动状态 -> 内存管理变得容易。

于 2018-09-05T15:37:20.753 回答