好的,这真的让我很难过:
我在窗口上创建一个模态表
-(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存在且处于正常状态。
所以,问题是:我错过了什么吗?
答案 0 :(得分:19)
您必须为工作表设置委托。委托应该实现一个带有如下签名的方法:
- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
(如果您愿意,可以使用其他名称,但它应该接受相同的参数。)
您可以在该方法中执行任何操作,但最终应该以:
结束[sheet orderOut:self];
将解雇工作表。
答案 1 :(得分:3)
请参阅:Creating a Modal Dialog or Window in Cocoa Objective-c?
不需要代表。以下内容适用于我解雇并允许稍后再调用它:
[NSApp endSheet: loginWindow];
[loginWindow orderOut:self];