【问题标题】:NSColorPanel's selector has been called twiceNSColorPanel 的选择器被调用了两次
【发布时间】:2013-07-23 02:38:14
【问题描述】:

我已共享 NSColorPanel 实例,并将选择器设置为他。我将它用于背景颜色和字体颜色。当我想设置文本颜色时,一切正常,但是当我想设置背景颜色时,选择器被调用两次,并且背景颜色已更改为以前的颜色。有一些代码:

- (IBAction)showColorPanel:(id)sender {
NSColorPanel *panel = [NSColorPanel sharedColorPanel];
[panel orderFront:nil];
//[panel ]
[panel setAction:@selector(changeColorForBackground:)];
[panel setTarget:self];
[panel makeKeyAndOrderFront:self];
isFontPanel = NO;
[[self getDesktopController] setFirstString];
}

选择器:

- (void)changeColorForBackground:(id)sender {
if (!isFontPanel) {
    DesktopController *desktopController = [self getDesktopController];
    [desktopController updateCellBackgroundColor:[sender color]];
}
}

谢谢回复!

【问题讨论】:

  • 您有自己的颜色池,还是使用字体面板中的文本颜色和背景颜色池?如果是后者,为什么要将自己设置为颜色面板的目标?

标签: objective-c cocoa nscolorpanel


【解决方案1】:

我将 NSWindowDelegate 添加到我的控制器并添加方法

- (void)windowWillClose:(NSNotification *)notification {
    if ([notification.object isEqual:[NSColorPanel sharedColorPanel]]) {
        [[NSColorPanel sharedColorPanel] setAction:nil];
    }
}

所以我必须在再次使用之前关闭 NSColorPanel。

【讨论】:

  • 非常难看。预计您的用户会收到很多关于颜色面板无法正常工作的投诉/负面评论。他们不会错的——这种行为被打破了。
猜你喜欢
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多