0

我需要向我的MainWindowController- 添加一个代表,它拥有所有的出口和行动并驱动程序。在ObjectiveC中,以下将起作用

NSWindowController < NSPopoverDelegate >

我将如何做到这一点MonoMac?同样,换一种说法,我希望我NSWindowController成为代表。

4

1 回答 1

0

在 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...
    }
于 2013-08-30T11:29:17.253 回答