13

好的,这真的难倒我:

我在窗口上创建了一个模式表

-(IBAction) login: (id) sender {
[NSApp beginSheet:loginWindow 
   modalForWindow:window 
    modalDelegate:nil 
   didEndSelector:nil 
      contextInfo:nil];
}

并尝试删除它

-(IBAction) loginWindowCancelPressed:   (id) sender {
debugLog(@"cancel");
[NSApp endSheet:loginWindow];
}

但它仍然存在。

我已经检查了所有明显的东西,比如 IB 连接,并确保 window 和 loginWindow 存在并且处于正常状态。

所以,问题是:我错过了什么吗?

4

2 回答 2

20

您必须为工作表设置委托。委托应实现具有如下签名的方法:

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

(如果您愿意,可以使用不同的名称,但它应该接受相同的参数。)

您可以在该方法中做任何您需要做的事情,但最终它应该以:

[sheet orderOut:self];

这将解雇工作表。

于 2010-08-26T15:02:49.420 回答
5

请参阅:在 Cocoa Objective-c 中创建模式对话框或窗口?

不需要委托人。以下内容对我有用,并允许稍后再调用它:

[NSApp endSheet: loginWindow];
[loginWindow orderOut:self];
于 2014-08-01T19:34:01.567 回答