0
하나의 컨트롤러에 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]];
}
}
}
(void) changeAttributes :(id) 보낸 사람에게 오류가있어 중단 점을 설정했다고 생각했습니다. 하지만 배경색을 변경하면 changeAttributes가 호출되지 않았으므로 괜찮습니다.
조언을위한 Thx! updateCellBackgroundColor : 모양은 다음과 같습니다. - (void) updateCellBackgroundColor : (NSColor *) backgroundColor { [self.startCell setBackgroundColor : backgroundColor]; [self.startCell setNeedsDisplay : YES]; } isFontPanel은 NSPanel이 NSColorPanel이거나 다른 NSColorPanel이 포함 된 NSFontPanel 인 경우 인식 할 수있는 변수입니다. –