Cocoa:NSTextStorageDelegate有过时的NSLayoutManager吗?

时间:2010-10-31 15:39:32

标签: cocoa nstextview nslayoutmanager

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

我的属性正在应用,但是在进行编辑之前它们始终应用于文本,即使我调用NSLayoutManager的方法不是来自-will...而是{{1} }。

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

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

我知道did...的{​​{1}}方法,并且到目前为止已成功使用这些方法,但我已经达到了我现在需要通过布局管理器,而不是重构/优化练习的一部分。

1 个答案:

答案 0 :(得分:1)

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