2

プロパティ(正確には、)を公開して、他のオブジェクトとバインドできるようにするNSViewサブクラスがあります(プログラムでメソッドを使用)。NSGradientbind:toObject:withKeyPath:options:

どのような手順を踏む必要がありますか?

これが私がしたことです:

+(void)initalize {
  [self exposeBinding:@"gradient"];
}
- (Class)valueClassForBinding:(NSString*)binding {
  if ([binding isEqualToString:@"gradient"]) { return([NSGradient class]); }

  return(nil);
}
-(NSArray*)exposedBindings {
  return([NSArray arrayWithObjects:@"gradient",nil]);
}

バインディングがInterfaceBuilderに表示されなくてもかまいません。はでgradient実装されたプロパティで@property (nonatomic, retain) NSGradient* gradientあり、現在の実装で正常に機能しています。

それを実装するには、上記のコードだけが必要ですか?(簡単すぎるようです)何かが足りないと思います。

注:私はBindingsの専門家ではありませんが、Objective-Cのほとんどでうまくやっています。

4

1 に答える 1

2

制限されるプロパティは、KVOおよびKVCに準拠している必要があります。それは本質的に必要なすべてです。プロパティを自分のやり方で宣言してから、それを実行@synthesizeするか、同等のことを行うだけで十分です。

bind:toObject:withKeyPath:options:何らかの理由でこれは一方向にすぎないため、TomDallingがメモしているようにKVCを使用して値を伝播する必要があります。メッセージの受信者に加えられた変更は、-bind:etc手動で伝播する必要があります。

私の知る-exposeBinding:限り、Xcode 4では実際には何も実行せず、IBはプラグインをサポートしなくなったため必要ありません。ドキュメントから:

ほとんどの場合、bind:toObject:withKeyPath:options:を使用する必要があります。その後、プログラムでバインディングを確立する場合にのみ使用します。unbind:の使用については、「Unbinding」で説明しています。他のメソッド(クラスメソッドexposedBinding:およびインスタンスメソッドexposedBindingsとvalueClassForBinding:)は、InterfaceBuilderパレットでのみ役立ちます。

私の知る限り、あなたが投稿したコードの大部分は、あなたが使用している限り必要ありません-bind:toObject:withKeyPath:options:。そのコードを保持してInterfaceBuilderでバインディングを公開しますが、2012年になり、IBにはプラグインがなくなりました...

于 2012-06-08T19:37:55.300 に答える