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

これを行うには、次の 2 つの方法があります。

デリゲートを分離したままにしておいても問題ない場合は、次のようにすることができます。

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 に答える