2

我有一个使用 Xcode 8 中的向导创建的 NSDocuments 和故事板应用程序。在 ViewController 场景中,我添加了一个 NSTextView。某些菜单项被禁用,例如粗体和斜体。

看着 First Responder,粗体和斜体的动作不存在。我应该自己编写这些方法吗?这是由于未正确设置响应者链吗?为什么下划线显示但不加粗?

编辑:添加图像以显示如何使用检查器栏编辑文本,但“格式”菜单未显示我期望的命令。

图像显示了我如何使用检查栏修改文本,但不能使用菜单,除了下划线

4

2 回答 2

8

这个问题有一个历史(?)原因。当在 xib 文件中创建主菜单时,xib 文件自动包含一个 NSFontManager 实例,并且像 Bold 这样的菜单项连接到它。然而,在现代故事板中,没有预设 NSFontManager 实例。

那么,您可以按照以下步骤将它们手动连接到 FontManager。

  1. 在 Application 场景中创建一个普通的 Object 实例(蓝色立方体)。
  2. 将 Object 实例的类更改为 NSFontManager。 在此处输入图像描述
  3. 将菜单项连接到addFontTrait(_:)fontManager 的操作。同样,将“较大”和“较小”项目连接到modifyFont(_:). 在此处输入图像描述

您还需要设置 menuItems 的标签,但它们实际上已经设置好了。仅当 menuItem 的标签为 时,也手动设置对应的标签0

于 2016-10-19T20:34:28.017 回答
0

如果您 ctrl 从菜单项拖动到第一响应者,在菜单视图中,您将获得相同的选项,只需 ctrl 单击。然后你实现你刚刚连接的任何功能。如果您将 File > New 连接到 newDocument 并在您的 ViewController 中实现

func newDocument(_ sender: Any?){
    print("func newDocument(_ sender: Any? \(String(describing: sender)))")
}

它会被调用。第一响应者列出了所有与添加的对象相同的方法,其中 NSFontManager 作为类。我不在方法前面使用@IBAction,因为我没有连接它。

于 2017-05-20T16:02:15.573 回答