0

RestFull呼び出しのオブジェクトとしてカスタムクラス「サイズ」があります。結果は、NSArrayController によって制御される配列に入力されます。次に、TableView は IB でこのコントローラーにバインドされます。すべてがapectedとして機能します。私が達成するのは、サイズに基づいて 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 に答える
-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 に答える