将NSPopoverDelegate添加到我的MainWindowController

时间:2013-08-29 21:58:58

标签: monomac

我需要向我的MainWindowController添加一个委托 - 它包含所有出口和操作并驱动程序。在ObjectiveC中,以下内容可行

NSWindowController < NSPopoverDelegate >

我如何在MonoMac中执行此操作?再说一次,换句话说,我希望我的NSWindowController成为代表。

1 个答案:

答案 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...
    }