根据NSTableview中的值启用按钮

时间:2013-02-21 05:32:15

标签: objective-c cocoa nstableview nsbutton

我有一个NSTableview。我需要根据tableview中列的值启用按钮。例如,在表视图中,我有一个列Status。我有2种状态,撤回和预订。如果我点击状态为Withdrawn的行,我需要禁用撤销按钮。 我可以通过绑定来做到吗?我怎么能这样做?请帮助我。感谢。

1 个答案:

答案 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