1

我想了解/复制“按运行循环传递/循环分组”功能NSUndoManger

NSUndoManager在同一个运行循环循环中多次调用时,可以将多个调用组合registerUndo()成一个“撤消”操作。这是由 确定的NSUndoManager.groupsByEvent,默认情况下设置为true

所以是这样的:

// User clicks button... (causes a new run loop event)
undoManager.registerUndo(...) // #1
undoManager.registerUndo(...) // #2

...产生一个撤消组,然后单击编辑 → 撤消一次还原两个更改。

不知何故,NSUndoManager 可以确定两个调用registerUndo()是否在同一个运行循环周期中。这是如何运作的?

我的用例:

我有在用户与 UI 交互(例如单击按钮)后发送属性更改通知的代码。作为用户操作的结果,可以有一个或多个事件。我想将它们分组并在当前运行循环结束时只更新一次 UI。

4

1 回答 1

1

NSUndoManager 通常在运行循环期间自动创建撤消组。第一次被要求在运行循环中记录撤消操作时,它会创建一个新组。然后,在循环结束时,它关闭组。

来源:撤消操作和组

NSUndoManager是同一框架的一部分,NSRunLoop因此可能是关闭一个组的NSRunLoop信号。NSUndoManager你不知道,也不应该想知道。

于 2017-05-20T14:44:33.893 回答