ColorWell для цветных "Категория" - PullRequest
1 голос
/ 22 апреля 2011

У меня есть NSTextField, NSTableView со столбцом "категория", NSColorWell и пользовательский контроллер массива.

NSTextField и столбец "category" из 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"];

}

Надеюсь, мой код поможет вам понять мою проблему и заставить ее работать.

Я с нетерпением жду ответа от вас. Спасибо.

...