0

在 Objective-C 中,我可以使我的 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的Delegate属性(正确)键入为NSTextFieldDelegate

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

那么如何使这项工作像在 Objective-C 中那样工作呢?

4

1 回答 1

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;
    }
}
于 2013-02-22T15:52:57.713 回答