我对Cocoa Bindings很陌生,但我已经看够了,我很乐意将所有旧的笨重方法改为它。例如,我有NSColorWell
更改了我视图中某些NSTextField
的文本颜色。在实践中似乎很容易,但它不起作用。
以下是我的绑定如何查找NSColorWell
:
这是我对NSTextField
:
但不是显示颜色,而是显示NSCalibratedRGBColor...
。显然,它没有为字段设置颜色的值,它只是显示原始数据。
所以,在我四处寻找之后,我试图通过这样做来创建自己的NSValueTransformer
:
@interface DataToColor: NSValueTransformer {}
@end
#import "QWDataToColor.h"
@implementation DataToColor
+(Class)transformedValueClass { return [NSColor class]; }
+(BOOL)allowsReverseTransformation { return NO; }
-(id)transformedValue:(id)item {
NSColor *theColor=nil;
NSData *theData=[NSData dataWithData:item];
if (theData != nil)
theColor=(NSColor *)[NSUnarchiver unarchiveObjectWithData:theData];
return theColor;
}
@end
然后我将该值变换器设置为IB中绑定中的“Value Transformer”区域。
然而,它仍然给出了相同的结果。有什么想法吗?
答案 0 :(得分:1)
值绑定是:
An NSString or NSNumber that is displayed as the content of the NSTextField
您想要绑定NSTextField的textColor属性,而不是值。
有关NSTextField支持的完整绑定列表,请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CocoaBindingsRef/BindingsText/NSTextField.html。
答案 1 :(得分:1)
这很简单。您可以在代码中以及通过IB绑定事物,在这种情况下,我认为这是唯一的方法,因为视图(在这种情况下,颜色井)不会在IB *中显示为可绑定对象:
// Given two appropriately-set-up IBOutlets, tf to the text field,
// and cw to the color well
[tf bind:@"textColor" toObject:cw withKeyPath:@"color" options:nil];
这也是可能的,在某些情况下是可取的,例如当您可能需要在其他地方使用此值或将其归档时,通过控制器中的中间变量绑定每个对象。
*我很想对此表示错误!