我需要向我的MainWindowController
- 添加一个代表,它拥有所有的出口和行动并驱动程序。在ObjectiveC
中,以下将起作用
NSWindowController < NSPopoverDelegate >
我将如何做到这一点MonoMac
?同样,换一种说法,我希望我NSWindowController
成为代表。
我需要向我的MainWindowController
- 添加一个代表,它拥有所有的出口和行动并驱动程序。在ObjectiveC
中,以下将起作用
NSWindowController < NSPopoverDelegate >
我将如何做到这一点MonoMac
?同样,换一种说法,我希望我NSWindowController
成为代表。
在 MonoMac 中执行此操作的标准方法是在 MainWindowController 中嵌套一个私有类,该类派生自 NSPopoverDelegate。因为您的委托必须从基委托类派生,所以您不能真正使 MainWindowController 本身成为委托。
例如
public partial class MainWindowController : MonoMac.AppKit.NSWindowController
{
public override void AwakeFromNib()
{
myPopover.Delegate = new MyPopoverDelegate();
base.AwakeFromNib();
}
private class MyPopoverDelegate : NSPopoverDelegate
{
public override bool ShouldClose(NSPopover popover)
{
// etc...
}
}
如果您真的希望 MainWindowController 充当委托,您可以使用该WeakDelegate
属性(它接受一个对象)并手动导出委托方法。这不是首选模式:
public override void AwakeFromNib()
{
myPopover.WeakDelegate = this;
base.AwakeFromNib();
}
[Export("popoverShouldClose:")]
private bool PopoverShouldClose(NSPopover popover)
{
// etc...
}