0

我有一个自定义类“大小”作为 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

委托类构造函数:

- (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;
}

所以该方法是从委托正确调用的,但逻辑不起作用。

任何帮助在很大程度上都是受欢迎的。

4

3 回答 3

1

您也可以尝试使用 NSAttributedString。

于 2015-02-04T07:11:04.763 回答
0

所以解决方案来了。该错误最初来自搜索 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;
    }
于 2015-02-05T15:19:53.463 回答
-1

如果您想将背景颜色设置为 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;

参考在 NSTableCellView 上设置背景颜色

在您的代码中,您尝试为单元格中的文本着色 - 这对您来说是正确的要求 - 我看不到您为单元格设置文本。

于 2015-02-03T11:03:49.977 回答