我需要向我的MainWindowController
添加一个委托 - 它包含所有出口和操作并驱动程序。在ObjectiveC
中,以下内容可行
NSWindowController < NSPopoverDelegate >
我如何在MonoMac
中执行此操作?再说一次,换句话说,我希望我的NSWindowController
成为代表。
答案 0 :(得分:0)
在MonoMac中执行此操作的标准方法是在MainWindowController中嵌套一个派生自NSPopoverDelegate的私有类。因为您的委托必须从基类委托类派生,所以您无法真正使您的MainWindowController本身成为委托。
e.g。
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...
}