【问题标题】:NSView (Content View) as firstResponderNSView(内容视图)作为 firstResponder
【发布时间】:2011-07-09 08:06:57
【问题描述】:

我有一个内容视图,我在我的首选项笔尖中使用它。 我使用一种方法在我的应用程序中更改 NSTextView 的字体。

这个内容视图必须设置为 firstResponder 才能从我的 changeTextFont: 方法中获取消息,但由于它不是一个窗口,它没有 firstResponder。结果,它根本不会改变文本字体......有人有解决方法吗?

谢谢大家。

【问题讨论】:

  • 我不确定您的内容视图是否必须是您尝试做的事情的第一响应者...您能解释一下您为什么这么认为吗?对不起,如果我在你的解释中遗漏了一些明显的东西......
  • Sergio,看看这个例子(这是我正在使用的):homepage.mac.com/mmalc/CocoaExamples/ControlledPreferences.zip。它有一个作为 firstResponder 的窗口,而不是一个内容视图,所以我想根据我的需要进行调整。
  • 没人能帮我吗?

标签: objective-c nsview first-responder


【解决方案1】:

我可以在不指定 [self window] 作为第一响应者的情况下使示例项目工作。我所做的是:

  1. (void)changeTextFont:(id)sender,我替换了语句:

    [[self window] makeFirstResponder:[self window]];
    

    带线:

    [[NSFontManager sharedFontManager] setAction:@selector(changeMyFont:)]; 
    [[NSFontManager sharedFontManager] setTarget:self];    //-- this seems to be not mandatory, but I mention it because your case could be different
    
  2. 我将changeFont:重命名为changeMyFont:

    - (void)changeMyFont:(id)sender
    {
    

通过这些更改,字体在示例内容视图中得到正确更新。

我不知道它是否适合您,因为最终您会尝试在不同的上下文中使用此代码,但我希望它会。我建议您首先尝试修改示例项目,以便您对我的解决方案有信心,然后将其移至您的项目以检查它是否也可以在那里工作。

【讨论】:

  • 塞尔吉奥,感谢您的回答,但这不起作用。我不知道为什么,但它没有......
  • changeMyFont中放一个断点,你会看到它被调用了。另外,看看我发布的图片......
  • 好吧,如果它适用于您的内容视图,它也应该适用于我......我可以看到更多您的代码吗?也许我错过了什么......
  • 我已经重写并澄清了我的答案,希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多