可以在NSTextView中加下划线,但不能加粗文本

时间:2016-10-14 17:56:21

标签: swift macos nstextview nsdocument nsresponder

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

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

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

Image showing how I can modify text with the Inspector Bar, but not with the menu, apart from Underlining

2 个答案:

答案 0 :(得分:8)

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

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

  1. 在应用程序场景中创建一个普通的Object实例(蓝色立方体)。
  2. 将Object实例的类更改为NSFontManager。 enter image description here
  3. 将菜单项连接到fontManager的addFontTrait(_:)操作。同样,连接"更大"和#34;较小的"项目到modifyFont(_:)enter image description here
  4. 您还需要设置menuItems'标签,但实际上它们已经设置好了。仅当menuItem标记为0时,也手动设置对应标记。

答案 1 :(得分:0)

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

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

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