我正在使用NSTextView并为其-textStorage
属性设置了委托。收到-textStorageDidProcessEditing:
后,我需要将属性应用于部分文本。
我的属性正在应用,但是在进行编辑之前它们始终应用于文本,即使我调用NSLayoutManager的方法不是来自-will...
而是{{1} }。
就好像布局管理器在执行的这一点上不知道最近的字形插入/删除,所以我假设NSTextView / NSTextStorage调用委托方法然后通知布局管理器更新。
有没有办法可以强制布局管理器立即更新,以便我可以让它工作?
我知道did...
的{{1}}方法,并且到目前为止已成功使用这些方法,但我已经达到了我现在需要通过布局管理器,而不是重构/优化练习的一部分。
答案 0 :(得分:1)
我找到了解决这个问题的方法。如果您注册为NSTextStorage的-textStorageDidProcessEditing:
和NSLayoutManager的-didInvalidateLayout:
通知的委托,那么您可以从文本存储委托中有效地“排队”操作,只有在布局管理器委托收到通知后才会运行该操作这样做是安全的。