1

我正在使用 NSTextView 并为其-textStorage属性设置了一个委托。收到后,-textStorageDidProcessEditing:我需要将属性应用于部分文本。

我的属性正在被应用,但它们总是在我进行编辑之前应用于文本,即使我不是从-will...but调用 NSLayoutManager 的方法did...

就好像布局管理器在执行时不知道最近的字形插入/删除,所以我假设 NSTextView/NSTextStorage 调用委托方法然后通知布局管理器进行更新。

有没有办法可以强制布局管理器立即更新,以便我可以让它工作?

我知道NSTextStorage's-addAttribute:value:range:方法并且到目前为止一直在成功使用这些方法,但是我已经达到了现在需要通过布局管理器执行此操作的地步,而不是作为重构/优化练习的一部分。

4

1 回答 1

1

我找到了解决这个问题的方法。如果您注册为 NSTextStorage-textStorageDidProcessEditing:和 NSLayoutManager-didInvalidateLayout:通知的委托,那么您可以有效地从文本存储委托中“排队”操作,该操作仅在布局管理器委托收到通知表明这样做是安全的时才会运行。

于 2010-11-02T02:43:23.910 回答