我有一个NSTableview。我需要根据tableview中列的值启用按钮。例如,在表视图中,我有一个列Status。我有2种状态,撤回和预订。如果我点击状态为Withdrawn的行,我需要禁用撤销按钮。 我可以通过绑定来做到吗?我怎么能这样做?请帮助我。感谢。
答案 0 :(得分:1)
如果您创建自定义NSValueTransformer
,则可以使用绑定启用或禁用该按钮。
您可以按如下方式绑定按钮的Enabled
属性:
绑定到:arrayController
控制器密钥:selection
模型关键路径:status
Value Transformer:MDStatusValueTransformer
注意:代替arrayController
,您应该选择nib文件中数组控制器的名称。代替MDStatusValueTransformer
,您应该指定最终命名我在下面提供的类的任何类名。
正如我所提到的,您需要创建自定义NSValueTransformer
。启用的属性需要在BOOL
中包含NSNumber
,但您的status
属性为NSString
。因此,您将创建一个自定义NSValueTransformer
,用于检查传入的status
NSString
,并在NO
等于status
时返回@"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