2013-02-22 9 views
0

를 사용하여 NSTextField있는 파생하여 NSTextViewDelegate 프로토콜 - 그래서 같은 : 나는 C#을이 관용구를 번역 할 수있는 방법monomac/Xamarin.Mac는 -, 내가 NSTextField있는 내 서브 클래스에 부합 할 수 목표 - C에서 NSTextViewDelegate

@interface PasswordField : NSTextField <NSTextViewDelegate> 

/모노맥?

내가 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와 같이 만들려면 어떻게해야합니까? 같은 PasswordField 객체를 사용하려는 경우,

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

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

또는이 두 가지 방법이 있습니다

답변

1

: 대리자 별도의 유지와 함께 잘 경우

, 당신은이 작업을 수행 할 수 있습니다 :

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

정말로 이것을하고 싶다면 .Delegate 대신 .WeakDelegate에 할당하십시오. [내보내기 (...)] 특성을 대리자 메서드에 적용해야합니다. – Curtis

+0

대답을 수정했습니다 – Curtis