我在一个控制器中共享了NSControlPanel。我正在将颜色更改为我的NSTextView背景和文本前景色。但是,当我在面板中更改背景颜色时,文本颜色也会自动更改。问题出在哪里?请回答!
- (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还没有被调用,所以没关系。
发布于 2013-05-12 09:57:55
问题只能在-[DesktopController updateCellBackgroundColor:]中找到,因为这似乎是在选择颜色时被调用的一个位置。由于无法访问此代码,我无法告诉您它如何更改您的模型。
以下是一些补充说明和建议:
isFontPanel变量的优点是什么?NSColorPanel和NSFontPanel采用了一个动作选择器,这足以区分这两个变量。get作为前缀,这不符合Cocoa约定,而且如果使用键值编码/观察,很可能会失败。DesktopController上定义方法,而不是直接更改其状态。https://stackoverflow.com/questions/16505741
复制相似问题