Chapter 25. Undo

The idea of undo is that the user can reverse a recently performed action. Behind the scenes, the app maintains an internal stack of undoable actions; undoing reverses the action at the top of the stack, and also makes that action available for redo through a secondary stack.

A pervasive undo capability is characteristic primarily of desktop macOS applications, but some iOS apps may also benefit from a limited undo facility, and certain built-in views — in particular, those that involve text entry (Chapter 10) — implement it already. UIDocument (see Chapter 22) integrates with your undo facility to update the document’s “dirty” state automatically.

Undo operates through an undo manager — an instance of UndoManager. Every time the user performs an action that is to be undoable, you register that action with the undo manager. When the user asks to undo, you send undo to the undo manager; when the user asks to redo, you send redo to the undo manager. In both cases, the undo manager performs the registered action and adjusts its internal undo and redo stacks appropriately.

I’ll introduce the UndoManager class with a simple example; for more information, read Apple’s Undo Architecture in the documentation archive, along with the class documentation.

Target–Action Undo

I’ll illustrate an UndoManager for a simple app that has just one kind of undoable action. In my example, the user can drag a small square around the screen. Our goal is to make the drag undoable.

Get Programming iOS 13 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.