gpt4 book ai didi

Objective-C 绑定(bind) - 将枚举绑定(bind)到 NSPopupButton

转载 作者:太空狗 更新时间:2023-10-30 03:31:32 27 4
gpt4 key购买 nike

我正在从事一个非常适合 UI 的 Cocoa 绑定(bind)的项目,但我在绑定(bind)对象属性的值时遇到问题,并且找不到合适的解决方案。对象如下:

typedef enum tagCSQuality {
kQualityBest = 0,
kQualityWorst = 1
} CSQuality;

@interface CSProfile : NSObject {
NSString *identifier;
NSString *name;
CSQuality quality;
}

在 XIB 中,我有一个对象 Controller ,其内容对象绑定(bind)到窗口 Controller 的“currentSelection”属性,它是上述对象的一个​​实例。然后我绑定(bind)了所有按预期工作的名称和标识符,但我看不到如何绑定(bind)枚举。

理想情况下,我希望 NSPopupButton 显示“最佳”和“最差”并选择正确的枚举值。我已将枚举更新为具有明确的数值,并且我相信我需要一个值转换器来转换这些值,但我对如何实现这一点一头雾水。

任何人都可以帮助我或指出正确的方向吗?

谢谢,J

最佳答案

为此,您可以使用 NSValueTransformer

由于枚举值只是整数,它们被封装在一个NSNumber对象中。

一个有效的转换器可能如下所示。

+(Class)transformedValueClass {
return [NSString class];
}

-(id)transformedValue:(id)value {
CSQuality quality = [value intValue];
if (quality == kQualityBest)
return @"Best";
else if (quality == kQualityWorst)
return @"Worst";

return nil;
}

这可以绑定(bind)到 NSPopupButton 的 Selected Value 绑定(bind)。

如果您想创建双向绑定(bind)(即能够在 NSPopupButton 中选择某些内容,您必须添加以下代码以进行反向转换:

+(BOOL)allowsReverseTransformation {
return YES;
}

-(id)reverseTransformedValue:(id)value {
if ([@"Worst" isEqualToString:value])
return [NSNumber numberWithInt: kQualityWorst];
else if ([@"Best" isEqualToString:value])
return [NSNumber numberWithInt: kQualityBest];

return nil;
}

关于Objective-C 绑定(bind) - 将枚举绑定(bind)到 NSPopupButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7147092/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com