Objective c 窗口:willPositionSheet:usingRect不';我没接到电话

Objective c 窗口:willPositionSheet:usingRect不';我没接到电话,objective-c,cocoa,modal-dialog,Objective C,Cocoa,Modal Dialog,我定义了一个Cocoa窗口控制器,它覆盖了window:willPositionSheet的方法,但是当对话框打开时,它没有被调用 - (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect { return rect; } 一个重要的事实是,对话框是一个图纸,父窗口是创建图纸对话框时作为Cocoa引用传递的碳窗 有什么想法吗 提前感谢这是一种NSWindow委托方

我定义了一个Cocoa窗口控制器,它覆盖了window:willPositionSheet的方法,但是当对话框打开时,它没有被调用

- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect
{
return rect;
}
一个重要的事实是,对话框是一个图纸,父窗口是创建图纸对话框时作为Cocoa引用传递的碳窗

有什么想法吗


提前感谢

这是一种
NSWindow
委托方法,因此您需要将窗口控制器设置为窗口的委托,方法是在Interface Builder中将窗口的委托出口连接到文件的所有者,或者调用窗口的
-setDelegate:
方法。

谢谢!嗯,我想这就是我在[theApp beginSheet:[dialog window]modalForWindow:window modalDelegate:dialog DiEndSelector:@selector(SheetDiEnd:returnCode:contextInfo:)contextInfo:nil]中所做的;对话框从NSWindowController扩展。我还尝试在创建后设置委托,但仍然没有调用该方法。不,您需要将对象设置为
窗口
对象的委托。这与您在
beginSheet:…
方法中指定的模式委托完全不同。这是从模式对话框接收消息的临时委托。您的主窗口需要一个委托,即工作表所附加的委托,在该委托中,您必须实现
窗口:willPositionSheet:usingRect:
方法。Rob,我恐怕要告诉您,我已经尝试创建了一个扩展NSObject的新类,并实现了方法窗口:willPositionSheet:usingRect,调用beginSheet后,我创建委托对象,并通过setDelegate:将其设置为主窗口,但window:willPositionSheet:usingRect仍然没有被调用。如果按照@RobKeniger所说的重新设置窗口委托,则该方法的调用很好。但它只适用于非全屏窗口。当窗口为全屏时,不再调用此方法。到OSX10.10为止,情况仍然如此(还没有检查10.11)。也许一个bug报告已经准备好了?