我正在使用一个NSTextView,并为它的-textStorage属性设置了一个委托。在收到-textStorageDidProcessEditing:后,我需要将属性应用到文本的各个部分。
我的属性正在被应用,但是在我编辑之前,它们总是应用于文本,即使我不是从-will...而是从did...调用NSLayoutManager的方法。
就好像布局管理器在执行的此时不知道最近的字形插入/删除一样,所以我假设NSTextView/NSTextStorage调用委托方法,然后通知布局管理器更新。
有什么方法可以迫使布局管理器立即更新,这样我才能让它正常工作吗?
我知道NSTextStorage的-addAttribute:value:range:方法,并且一直在成功地使用这些方法,但我已经到了需要通过布局管理器而不是作为重构/优化练习的一部分来完成这些工作的时候了。
发布于 2010-11-02 02:43:23
我找到了解决这个问题的办法。如果您注册为NSTextStorage的-textStorageDidProcessEditing:和NSLayoutManager的-didInvalidateLayout:通知的委托,那么您可以有效地“队列”来自文本存储委托的操作,这只能在布局管理器接收到安全的通知时运行。
https://stackoverflow.com/questions/4063750
复制相似问题