Я поделился NSControlPanel в одном контроллере. Я меняю цвет на свой фон NSTextView и цвет переднего плана текста. Но когда я меняю цвет на панели для фона, цвет текста также был изменен автоматически. Где проблема? Thx для ответа!Общая NSColorPanel в одном контроллере
- (IBAction)showColorPanel:(id)sender {
NSColorPanel *panel = [NSColorPanel sharedColorPanel];
[panel orderFront:nil];
[panel setAction:@selector(changeColorForBackground:)];
[panel setTarget:self];
[panel makeKeyAndOrderFront:self];
isFontPanel = NO;
}
- (void)changeColorForBackground:(id)sender {
if (!isFontPanel) {
DesktopController *desktopController = [self getDesktopController];
[desktopController updateCellBackgroundColor:[sender color]];
}
}
#pragma mark - font+color
- (IBAction)showFontPanel:(id)sender {
DesktopViewText *dvt = (DesktopViewText *)[[[self getDesktopController] startCell] subcell];
NSFontPanel *panel = [NSFontPanel sharedFontPanel];
NSFontManager *manager = [NSFontManager sharedFontManager];
if (dvt) {
[manager setSelectedFont:[[dvt label] font] isMultiple:NO];
}
[panel orderFront:nil];
[manager setAction:@selector(changeFont:)];
[manager setTarget:self];
isFontPanel = YES;
}
- (void)changeFont:(id)sender {
DesktopViewText *dvt = (DesktopViewText *)[[[self getDesktopController] startCell] subcell];
if (dvt) {
NSFont *oldFont = [dvt font];
NSFont *newFont = [sender convertFont:oldFont];
[[dvt textStorage] addAttribute:NSFontAttributeName value:newFont range:[dvt selectedRange]];
}
}
- (void)changeAttributes:(id)sender {
if (isFontPanel) {
DesktopViewText *dvt = (DesktopViewText *)[[[self getDesktopController] startCell] subcell];
if (dvt) {
NSDictionary *oldAttributes = [[dvt textStorage] fontAttributesInRange:[dvt selectedRange]];
NSDictionary *newAttributes = [sender convertAttributes: oldAttributes];
[[dvt textStorage] setAttributes:newAttributes range:[dvt selectedRange]];
//[[dvt textStorage] addAttribute:NSForegroundColorAttributeName value:[newAttributes ] range:[dvt selectedRange]];
}
}
}
Я думал, что это была ошибка (недействительных) changeAttributes: (идентификатор) отправителя, так что я установить точку останова. Но когда я меняю цвет фона, changeAttributes не вызывается, поэтому все в порядке.
Thx за советы! updateCellBackgroundColor: выглядит следующим образом: - (Недействительными) updateCellBackgroundColor: (NSColor *) BackgroundColor { [self.startCell setBackgroundColor: BackgroundColor]; [self.startCell setNeedsDisplay: YES]; } isFontPanel является переменной для распознавания, если NSPanel является NSColorPanel или NSFontPanel, который содержит другую NSColorPanel. –