将NSTextField的文本颜色绑定到NSColorWell?

时间:2011-05-06 01:47:51

标签: objective-c cocoa macos cocoa-bindings

我对Cocoa Bindings很陌生,但我已经看够了,我很乐意将所有旧的笨重方法改为它。例如,我有NSColorWell更改了我视图中某些NSTextField的文本颜色。在实践中似乎很容易,但它不起作用。

以下是我的绑定如何查找NSColorWell

enter image description here

这是我对NSTextField

的绑定

enter image description here

但不是显示颜色,而是显示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”区域。

然而,它仍然给出了相同的结果。有什么想法吗?

2 个答案:

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

这也是可能的,在某些情况下是可取的,例如当您可能需要在其他地方使用此值或将其归档时,通过控制器中的中间变量绑定每个对象。


*我很想对此表示错误!