私はNSTableviewを持っています。テーブルビューの列の値に基づいてボタンを有効にする必要があります。たとえば、テーブル ビューには列 Status があります。取消と予約済みの 2 種類のステータスがあります。ステータスが取り消された行をクリックした場合、取り下げボタンを無効にする必要があります。バインディングを通してそれを行うことはできますか?どうすればできますか?助けてください。ありがとう。
1 に答える
カスタムを作成すると、NSValueTransformer
バインディングを使用してボタンを有効または無効にできます。
Enabled
ボタンのプロパティは次のようにバインドできます。
バインド先:arrayController
コントローラーキー:selection
モデルキーパス:status
バリュートランスフォーマー:MDStatusValueTransformer
注:の代わりにarrayController
、nibファイルにあるアレイコントローラーの名前を選択する必要があります。の代わりにMDStatusValueTransformer
、以下で提供するクラスに名前を付けることになったクラス名を指定する必要があります。
前述したように、カスタムを作成する必要がありますNSValueTransformer
。有効なプロパティは、でBOOL
ラップされていることを想定してNSNumber
いますが、status
プロパティはNSString
です。したがって、NSValueTransformer
着信を調べ、がに等しい場合はstatus
NSString
を返すカスタムを作成します。NO
status
@"Withdrawn"
カスタムNSValueTransformer
は次のようになります。
MDStatusValueTransformer.h:
@interface MDStatusValueTransformer : NSValueTransformer
@end
MDStatusValueTransformer.m:
@implementation MDStatusValueTransformer
+ (Class)transformedValueClass {
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation {
return NO;
}
- (id)transformedValue:(id)value {
if (value == nil) return nil;
if (![value isKindOfClass:[NSString class]]) return nil;
if ([value isEqualToString:@"Withdrawn"]) {
return [NSNumber numberWithBool:NO];
}
return [NSNumber numberWithBool:YES];
}
@end