【问题标题】:Cocoa: NSTextStorageDelegate has out-of-date NSLayoutManager?Cocoa:NSTextStorageDelegate 有过时的 NSLayoutManager?
【发布时间】:2010-10-31 15:39:32
【问题描述】:

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

我的属性正在被应用,但它们总是被应用到文本之前我进行了编辑,即使我调用 NSLayoutManager 的方法不是来自-will... 而是来自did...。 p>

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

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

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

【问题讨论】:

    标签: cocoa nstextview nslayoutmanager


    【解决方案1】:

    我找到了解决此问题的方法。如果您注册为 NSTextStorage 的 -textStorageDidProcessEditing: 和 NSLayoutManager 的 -didInvalidateLayout: 通知的委托,那么您可以有效地“排队”来自文本存储委托的操作,该操作仅在布局管理器委托接收到可以安全执行的通知后运行所以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多