1

これは、NSArrayController のアイテムの選択に応じて NSMenuItem を有効/無効にする方法です。

ここに画像の説明を入力

ただし、もう 1 つのケースで NSMenuItem を無効にしたいと思います。選択が複数の場合です。つまり、複数のアイテムが選択されている場合は、無効にする必要があります。

ありがとう

4

2 に答える 2

1

@bijan の transformValue: メソッドは改善される可能性があります。

- (id)transformedValue:(id)value{

    if(value == nil)
    {
        return @(NO);
    }

    if([value respondsToSelector:@selector(unsignedIntegerValue)] == NO)
    {
        return @(NO);
    }

    NSUInteger count = [value unsignedIntegerValue];
    return @(count > 0);
}
于 2013-02-04T20:37:27.477 に答える
0

このためにNSValueTransformerをサブクラス化できます!

実装は次のようになります。

@implementation CountToEnabledTransformer


+ (Class)transformedValueClass {

    return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation {

    return NO;
}
- (id)transformedValue:(id)value{

    int count = value;
    BOOL boolValue = 0;

    if ((count > 1) || (count == 0)) {
        boolValue = 0;
    }else {
        boolValue = 1;
    }

    NSNumber *boolNumber = [NSNumber numberWithBool:boolValue];



return boolNumber;
}
@end

これは@count値を受け取り、ifステートメントを実行し、適切なブール値を返し、enabledプロパティをにバインドします。

新しく作成したNSValueTransformerサブクラスを登録することを忘れないでください。

[NSValueTransformer setValueTransformer:[[CountToEnabledTransformer alloc] init] forName:@"CountToEnabledTransformer"];

これを行うのに適した場所はです- (void)applicationDidFinishLaunchingので、ペン先がそれにバインドしようとすると、すでに登録されています!

その後、NSValueTranformerのサブラス名をIBバインディングインスペクターの適切なテキストフィールドに入力するだけです。

于 2012-05-30T16:14:05.913 に答える