0

私はNSTableviewを持っています。テーブルビューの列の値に基づいてボタンを有効にする必要があります。たとえば、テーブル ビューには列 Status があります。取消と予約済みの 2 種類のステータスがあります。ステータスが取り消された行をクリックした場合、取り下げボタンを無効にする必要があります。バインディングを通してそれを行うことはできますか?どうすればできますか?助けてください。ありがとう。

4

1 に答える 1

1

カスタムを作成すると、NSValueTransformerバインディングを使用してボタンを有効または無効にできます。

Enabledボタンのプロパティは次のようにバインドできます。

バインド先:arrayController

コントローラーキー:selection

モデルキーパス:status

バリュートランスフォーマー:MDStatusValueTransformer

注:の代わりにarrayController、nibファイルにあるアレイコントローラーの名前を選択する必要があります。の代わりにMDStatusValueTransformer、以下で提供するクラスに名前を付けることになったクラス名を指定する必要があります。

前述したように、カスタムを作成する必要がありますNSValueTransformer。有効なプロパティは、でBOOLラップされていることを想定してNSNumberいますが、statusプロパティはNSStringです。したがって、NSValueTransformer着信を調べ、がに等しい場合はstatus NSStringを返すカスタムを作成します。NOstatus@"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
于 2013-02-21T07:04:04.040 に答える