NSTableCellView *result 根据逻辑改变文字颜色
NSTableCellView *result change the text color according to the logic
我有一个自定义 class "size" 作为 RestFull 调用的对象。结果填充一个由 NSArrayController 控制的数组。然后 TableView 将绑定到 IB 中的这个控制器。一切正常。我要实现的是根据大小更改 NSViewCell 中的颜色。例如:尺码 "M" 为红色,"S" 为绿色,"XXL" 为棕色。
.h
@interface RecordSize : NSObject
@property (readwrite, retain) NSString *key;
@property (readwrite, retain) NSString *size;
-(id)initWithName:(NSDictionary *)row;
@end
.m
#import "RecordSize.h"
@implementation RecordSize
@synthesize key = _key, size = _size;
-(id)initWithName:(NSDictionary *)row {
self = [super init];
if (self) {
_key = [row valueForKey:@"id"];
_size = [row valueForKey:@"text"];
}
return self;
}
@end
委托class构造函数:
- (id)init {
if (self) {
self = [super init];
//*********** TableViev
NSString * urlString = @"http://xxxxx/restfull/size/";
RestateC *restSize = [[RestateC alloc]initWithName:urlString];
//add Delegate
restSize.delegate = self;
NSArray* aTmp = [restSize syncronize];
NSMutableArray *thingSize = [[NSMutableArray alloc]init];
for (NSDictionary *row in aTmp)
{
RecordSize *item = [[RecordSize alloc] initWithName:row];
[thingsSize addObject: item ];
}
self.aRecordSize = thingsRecordSize;
_sizeTableView.delegate = self;
}
return self;
}
基于视图的单元格中 NSTablecolumn 的方法
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
if( [[tableColumn identifier] isEqual:@"AGONIA"] ) {
NSLog(@"IDENTITY %@", [tableColumn identifier]);
if ([[result.textField stringValue] isEqualToString :@"M"]) {
result.textField.textColor = [NSColor redColor];
}
if ([[result.textField stringValue] isEqualToString :@"S"]) {
result.textField.textColor = [NSColor greenColor];
}
if ([[result.textField stringValue] isEqualToString :@"XXL"]) {
result.textField.textColor = [NSColor brownColor];
}
}
else result.textField.textColor = [NSColor blackColor];
return result;
}
因此该方法已从委托中正确调用,但逻辑不起作用。
欢迎提供任何帮助。
如果你想为 NSTableCellView 设置背景颜色 - 你应该使用以下界面。
NSColor *bgcolor = nil;
if ([[result.textField stringValue] isEqualToString :@"M"]) {
bgcolor = [NSColor redColor];
}
if ([[result.textField stringValue] isEqualToString :@"S"]) {
bgcolor = [NSColor greenColor];
}
if ([[result.textField stringValue] isEqualToString :@"XXL"]) {
bgcolor = [NSColor brownColor];
}
result.layer.backgroundColor = bgcolor;
参考 Set Background colour on NSTableCellView
在您的代码中,您尝试为单元格中的文本着色 - 这对您来说是正确的要求 - 我看不到您为单元格设置文本。
你也可以尝试使用 NSAttributedString。
所以解决方案到了。错误最初来自搜索 NSTableCellView *result 中的值。结果不包含任何值:它们仅用于显示值。
最后:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
if( [[tableColumn identifier] isEqual:@"SizeColumn"] ) {
if ([[[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row] isEqualToString:@"M"]) {
NSLog(@"FIND: %@", [[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row]);
[result.textField setTextColor:[NSColor blueColor]];
return result;
}
if ([[[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row] isEqualToString:@"XXL"]) {
NSLog(@"FIND: %@", [[_arrayInstance valueForKeyPath:@"testo"]objectAtIndex:row]);
[result.textField setTextColor:[NSColor redColor]];
return result;
}
}
return result;
}
我有一个自定义 class "size" 作为 RestFull 调用的对象。结果填充一个由 NSArrayController 控制的数组。然后 TableView 将绑定到 IB 中的这个控制器。一切正常。我要实现的是根据大小更改 NSViewCell 中的颜色。例如:尺码 "M" 为红色,"S" 为绿色,"XXL" 为棕色。
.h
@interface RecordSize : NSObject
@property (readwrite, retain) NSString *key;
@property (readwrite, retain) NSString *size;
-(id)initWithName:(NSDictionary *)row;
@end
.m
#import "RecordSize.h"
@implementation RecordSize
@synthesize key = _key, size = _size;
-(id)initWithName:(NSDictionary *)row {
self = [super init];
if (self) {
_key = [row valueForKey:@"id"];
_size = [row valueForKey:@"text"];
}
return self;
}
@end
委托class构造函数:
- (id)init {
if (self) {
self = [super init];
//*********** TableViev
NSString * urlString = @"http://xxxxx/restfull/size/";
RestateC *restSize = [[RestateC alloc]initWithName:urlString];
//add Delegate
restSize.delegate = self;
NSArray* aTmp = [restSize syncronize];
NSMutableArray *thingSize = [[NSMutableArray alloc]init];
for (NSDictionary *row in aTmp)
{
RecordSize *item = [[RecordSize alloc] initWithName:row];
[thingsSize addObject: item ];
}
self.aRecordSize = thingsRecordSize;
_sizeTableView.delegate = self;
}
return self;
}
基于视图的单元格中 NSTablecolumn 的方法
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
if( [[tableColumn identifier] isEqual:@"AGONIA"] ) {
NSLog(@"IDENTITY %@", [tableColumn identifier]);
if ([[result.textField stringValue] isEqualToString :@"M"]) {
result.textField.textColor = [NSColor redColor];
}
if ([[result.textField stringValue] isEqualToString :@"S"]) {
result.textField.textColor = [NSColor greenColor];
}
if ([[result.textField stringValue] isEqualToString :@"XXL"]) {
result.textField.textColor = [NSColor brownColor];
}
}
else result.textField.textColor = [NSColor blackColor];
return result;
}
因此该方法已从委托中正确调用,但逻辑不起作用。
欢迎提供任何帮助。
如果你想为 NSTableCellView 设置背景颜色 - 你应该使用以下界面。
NSColor *bgcolor = nil;
if ([[result.textField stringValue] isEqualToString :@"M"]) {
bgcolor = [NSColor redColor];
}
if ([[result.textField stringValue] isEqualToString :@"S"]) {
bgcolor = [NSColor greenColor];
}
if ([[result.textField stringValue] isEqualToString :@"XXL"]) {
bgcolor = [NSColor brownColor];
}
result.layer.backgroundColor = bgcolor;
参考 Set Background colour on NSTableCellView
在您的代码中,您尝试为单元格中的文本着色 - 这对您来说是正确的要求 - 我看不到您为单元格设置文本。
你也可以尝试使用 NSAttributedString。
所以解决方案到了。错误最初来自搜索 NSTableCellView *result 中的值。结果不包含任何值:它们仅用于显示值。
最后:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTableCellView *result = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
if( [[tableColumn identifier] isEqual:@"SizeColumn"] ) {
if ([[[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row] isEqualToString:@"M"]) {
NSLog(@"FIND: %@", [[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row]);
[result.textField setTextColor:[NSColor blueColor]];
return result;
}
if ([[[_arrayInstance valueForKeyPath:@"sizes"]objectAtIndex:row] isEqualToString:@"XXL"]) {
NSLog(@"FIND: %@", [[_arrayInstance valueForKeyPath:@"testo"]objectAtIndex:row]);
[result.textField setTextColor:[NSColor redColor]];
return result;
}
}
return result;
}