2013-02-22 6 views
0

В Objective-C, я могу сделать мой подкласс NSTextField соответствует в протокол NSTextViewDelegate - вот так:monomac/Xamarin.Mac - производные NSTextField с использованием NSTextViewDelegate

@interface PasswordField : NSTextField <NSTextViewDelegate> 

Как я могу перевести эту идиому на C#/monomac?

Я попытался подклассов NSTextViewDelegate:

private class TextViewDelegate : NSTextViewDelegate 
{} 

И назначая, что к делегату собственности моего NSTextField подкласса:

public class PasswordField : NSTextField 
{ 
    public PasswordField(NSCoder coder) : base(coder) 
    { 
     this.Delegate = new TextViewDelegate(); 
    } 
} 

Однако, очевидно, что это не работает, так как делегатом имущества NSTextField (правильно) напечатан как NSTextFieldDelegate.

Error CS0029: Cannot implicitly convert type `PasswordFieldControl.PasswordField.TextViewDelegate' to `MonoMac.AppKit.NSTextFieldDelegate' (CS0029) 

Как сделать эту работу так, как в объективе-C?

ответ

1

Есть два способа сделать это:

Если вы штраф с сохранением делегат по отдельности, вы можете сделать это:

class TextViewDelegate : NSTextViewDelegate 
{ 
    public override void TextDidChange (NSNotification notification) 
    { 
    } 
} 

public class PasswordField : NSTextField 
{ 
    public PasswordField(NSCoder coder) : base(coder) 
    { 
     this.WeakDelegate = new TextViewDelegate(); 
    } 
} 

или, если вы хотите использовать один и тот же объект PasswordField:

public class PasswordField : NSTextField 
{ 
    [Export("textDidChange:")] 
    public void TextDidChange (NSNotification notification) 
    { 
    } 

    public PasswordField(NSCoder coder) : base(coder) 
    { 
     this.WeakDelegate = this; 
    } 
} 
+0

Да, я заявил, что в моем вопросе. В Objective-C подклассы NSTextField можно подчинить протоколу NSTextViewDelegate. Я хочу знать, как воссоздать эту идиому в C#/MonoMac. – TheNextman

+0

Если вы действительно хотите это сделать, назначьте его .WeakDelegate вместо .Delegate, хотя я рекомендую это. Вам нужно будет применить атрибут [Export (...)] к вашим методам делегатов. – Curtis

+0

Я исправил ответ – Curtis