这就是我根据 NSArrayController 中的项目选择启用/禁用 NSMenuItem 的方式。
However I would like to disable the NSMenuItem in one more case: when the selection is multiple. 换句话说,如果选择了多个项目,则应将其禁用。
谢谢
这就是我根据 NSArrayController 中的项目选择启用/禁用 NSMenuItem 的方式。
However I would like to disable the NSMenuItem in one more case: when the selection is multiple. 换句话说,如果选择了多个项目,则应将其禁用。
谢谢
@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
,所以它已经注册了,当你 nib 尝试绑定它时!
之后,只需在 IB 绑定检查器的相应文本字段中输入 NSValueTranformer 的子类名称。