1

这就是我根据 NSArrayController 中的项目选择启用/禁用 NSMenuItem 的方式。

在此处输入图像描述

However I would like to disable the NSMenuItem in one more case: when the selection is multiple. 换句话说,如果选择了多个项目,则应将其禁用。

谢谢

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,所以它已经注册了,当你 nib 尝试绑定它时!

之后,只需在 IB 绑定检查器的相应文本字段中输入 NSValueTranformer 的子类名称。

于 2012-05-30T16:14:05.913 回答