JWo*_*ood 8 xcode cocoa objective-c cocoa-bindings
我正在开发一个项目,它非常适合UI的Cocoa绑定,但是我遇到了绑定对象属性值的问题,无法找到合适的解决方案.对象如下:
typedef enum tagCSQuality {
kQualityBest = 0,
kQualityWorst = 1
} CSQuality;
@interface CSProfile : NSObject {
NSString *identifier;
NSString *name;
CSQuality quality;
}
Run Code Online (Sandbox Code Playgroud)
在XIB中,我有一个对象控制器,其内容对象绑定到窗口控制器的"currentSelection"属性,该属性是上述对象的一个实例.然后我绑定了所有按预期工作的名称和标识符,但我看不出如何绑定枚举.
理想情况下,我希望NSPopupButton显示"Best"和"Worst"并选择正确的枚举值.我更新了枚举以获得明确的数值,我相信我需要一个值转换器来转换值,但我仍然坚持如何实现它.
任何人都可以帮助我或指出我正确的方向吗?
谢谢,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;
}
Run Code Online (Sandbox Code Playgroud)
这可以绑定到的Selected Value绑定NSPopupButton.
如果要创建双向绑定(即能够选择某些内容,则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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |