彩色“类别”的ColorWell

时间:2011-04-22 19:00:58

标签: objective-c cocoa nsarraycontroller nscoder nscolor

我有一个NSTextField,一个NSTableView,其中包含一列"类别",一个NSColorWell和一个自定义数组控制器。

NSTextField和列"类别"从NSTextField绑定到数组控制器,以便我在文本字段中写的所有内容都显示在此列中。

我遇到的问题如下:

我希望"类别中的字符串"列用于在用户选择颜色时获取NSColorWell的颜色。一切正常,但是当我第二次打开应用程序并创建第二个条目时,然后是"类别中的字符串颜色"列返回到用户选择颜色之前的第一种颜色。

我现在尝试这样做的方式:

AppDelegate.h:

IBOutlet NSArrayController *doToItemsArrayController;
NSColorWell *colorWell;
- (IBAction)addNewToDoItem:(id)sender;
@property (assign) IBOutlet NSColorWell *colorWell;

AppDelegate.m:

@synthesize colorWell;
- (IBAction)addNewToDoItem:(id)sender
{
    ToDoItem *newToDo = [[ToDoItem alloc] init];
    [newToDo setCategory:@"Beispiel-Kategorie"];
    [newToDo setColor:[NSColor greenColor]];
    [doToItemsArrayController addObject:newToDo];
}

- (IBAction)colorWellColorChanged:(id)sender
{
    NSColor *currentColor = [colorWell color];
    NSArray *selectedItems = [doToItemsArrayController selectedObjects];

    // Allen Items die Farbe geben
    // Es können ja auch mehrere ausgewählt sein.
    for (int i = 0; i < [selectedItems count] ; i++)
    {
        [[selectedItems objectAtIndex:i] setColor:currentColor];
    }
}

ToDoItem.h:

NSString *category;
NSColor *color;
@property (retain) NSString *category;
@property (retain) NSColor *color;

ToDoItem.m:

@synthesize category;
@synthesize color;

- (id)init {
    self = [super init];
    if (self) {
        color = [NSColor redColor];
    }
    return self;
}
- (id)initWithCoder:(NSCoder *)decoder
{
    if(![super init])
        return nil;

    [self setCategory:[decoder decodeObjectForKey:@"category"]];
    [self setColor:[decoder decodeObjectForKey:@"color"]];

    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:[self category] forKey:@"category"];
    [encoder encodeObject:[self color] forKey:@"color"];

}

我希望我的代码可以帮助您理解我的问题并使其正常运行。

我期待着您的回复。感谢。

0 个答案:

没有答案