Привязать цвет текста NSTextField к NSColorWell? - PullRequest
0 голосов
/ 06 мая 2011

Я довольно новичок в привязках Какао, но я видел достаточно, чтобы с удовольствием поменять все мои старые неуклюжие методы на него. Например, у меня есть 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

Затем я установил этот преобразователь значения в область «Value Transformer» в привязках в IB.

Тем не менее, он все же дал те же результаты. Есть идеи?

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Это довольно просто. Вы можете связать вещи в коде так же, как и через 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];

Также возможно, а в некоторых случаях желательно, например, когда вам может понадобиться использовать это значение в других местах или заархивировать его, чтобы связать каждый объект через промежуточную переменную в контроллере.


* Я хотел бы, чтобы меня неправильно показывали!

1 голос
/ 06 мая 2011

Значение привязки:

An NSString or NSNumber that is displayed as the content of the NSTextField

Вы хотите связать свойство textColor вашего NSTextField, а не значение.

См. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CocoaBindingsRef/BindingsText/NSTextField.html для полного списка привязок, поддерживаемых NSTextField.

...