0

私はObjective-Cの初心者です。そこで、C# + Monotouch を使用してアプリを作成します。ここで、ObjC で記述されたサードパーティ ライブラリ TTTAttributedLabel を使用する必要があります。そのコードを C# にバインドする必要があります。興味深い構造がいくつかあります。

@protocol TTTAttributedLabel <NSObject>
@property (nonatomic, copy) id text;
@end

@interface TTTAttributedLabel : UILabel <TTTAttributedLabel, UIGestureRecognizerDelegate>
/* some code here */
@end

TTTAttributedLabel と UILabel の継承については明らかです。私はこのようにしました:

[BaseType (typeof (NSObject))]
interface TTTAttributedLabel{
     // code here
}

[BaseType (typeof (UILabel))]
interface UITextField : TTTAttributedLabel{
}

しかし、 UIGestureRecognizerDelegateを継承する方法がわかりません。Objective -C ではプロトコルですが、Monotouch ではクラスであるためです。そのため、クラスからインターフェイスを継承できません。

これを行う正しい方法は何ですか?

4

1 に答える 1

1

この場合、UIGestureRecognizerDelegate が意味することは、オブジェクトがプロトコルに準拠するということです。お気づきのように、プロトコルをクラスにマッピングしたため、これが機能しなくなりました。

しかし、核となるのは、TTTAttributedLabel のインスタンスを UIGestureRecognizer の Delegate プロパティに渡すことです。

このような場合、代わりに WeakDelegate を使用できます。これは C# レベルの型チェックを実行せず、TTTAttributedLabel のインスタンスを UIGestureRecognizer.WeakDelegate プロパティに割り当てることができます。

于 2012-12-12T06:39:45.077 に答える