2013-08-29 5 views
0

Мне нужно добавить делегата в мой MainWindowController - который имеет все выходы и действия и управляет программой. В ObjectiveC, следующее будет работатьДобавление NSPopoverDelegate к моему MainWindowController

NSWindowController <NSPopoverDelegate>

Как бы сделать это в MonoMac? Опять же, если сказать по-другому, я бы хотел, чтобы мой делегат был NSWindowController.

ответ

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... 
    } 
+0

У меня возникли проблемы с поиском NSPopover Anything. Я обнаружил, что у dll MonoMac есть и пространство имен AppKit, но не NSPopover или NSPopoverDelegate. Нужно ли мне строить dll monomac из источника, чтобы получить его? – Shavais

+0

Это в «MonoMac.AppKit'. Вам не нужно строить из источника. – TheNextman

+0

Я использовал MonoDevelop, который поставлялся с Unity3D, и рамки Mono, которая поставляется с сайта Mono. NSPopover не был в Monomac.AppKit для меня, когда он работал именно так. Используя Xamarin Studio, я получаю NSPopover в Monomac.AppKit. – Shavais

Смежные вопросы