gpt4 book ai didi

objective-c - cocoa 文本菜单和修改 NSOutlineView 中的字体

转载 作者:行者123 更新时间:2023-12-03 17:50:11 25 4
gpt4 key购买 nike

系统提供的文本菜单通过发送许多消息来工作,例如changeFont:modifyFont:和addFontTrait:沿着第一响应者链,直到到达例如NSTextView。

我想扩展它来控制我的 NSOutlineView 中的行样式,但我只能在我的窗口 Controller 中覆盖changeFont:并拦截消息(也许是一个更好的地方来做到这一点,但它现在有效)。这适用于更改字体,但其他菜单项(如使用“modifyFont:”和“addFontTrait:”的“粗体”、“更大”、“更小”)不会在窗口 Controller 中被调用,因此我无法修改它们的行为以在大纲 View 上工作。有趣的是,它们在菜单中显示为可选,但仅调用了changeFont:,据我了解,我需要从NSMenuItem获取标签值,它是方法modifyFont:和addFontTrait:的发送者。

有谁知道如何通过在任何地方调用其他方法来实现此功能?谢谢!

最佳答案

这记录在 Cocoa Text Architecture Guide: Font Handling – Handling Font Changes 中。 -addFontTrait:-modifyFont: 消息不会沿着响应者链发送。它们被直接发送到字体管理器。字体管理器记录所请求的修改并向响应者链发送 -changeFont:

您应该只需要实现 -changeFont: 即可。

您没有从菜单项中获取标签。字体管理器就是这样做的。这是字体管理器内部记录的信息来源。

您的-changeFont:方法应在字体管理器上调用-convertFont:,传递当前字体。该方法将返回根据记录的更改请求修改的新字体。您将对所有应该受到影响的字体执行此操作。 (例如,您可能有一个包含多种字体的选择。)

您通常无法直接访问所请求的修改,例如“添加粗体特征”或“使字体更大”。

您可以通过子类化 NSFontManager 并将子类传递给 +[NSFontManager setFontManagerFactory:] 来自定义字体管理器。在自定义字体管理器中,您可以单独跟踪各种操作消息(例如 -addFontTrait:)请求的更改。您可以在此处检查发件人标签。然后,在大纲 View 中,您可以在验证 -changeFont: 的发送者是您的子类的实例后查询其属性,以确定请求的更改。

但请记住,您的自定义子类将在整个应用程序中使用,而不仅仅是用于大纲 View 。因此,您的自定义应该是除了 NSFontManager 的正常行为之外,而不是代替,这样就不会破坏内容。 p>

关于objective-c - cocoa 文本菜单和修改 NSOutlineView 中的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28822702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com