これは、NSArrayController のアイテムの選択に応じて NSMenuItem を有効/無効にする方法です。
ただし、もう 1 つのケースで NSMenuItem を無効にしたいと思います。選択が複数の場合です。つまり、複数のアイテムが選択されている場合は、無効にする必要があります。
ありがとう
これは、NSArrayController のアイテムの選択に応じて NSMenuItem を有効/無効にする方法です。
ただし、もう 1 つのケースで NSMenuItem を無効にしたいと思います。選択が複数の場合です。つまり、複数のアイテムが選択されている場合は、無効にする必要があります。
ありがとう
@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);
}
このために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バインディングインスペクターの適切なテキストフィールドに入力するだけです。