Менеджер по отмене
Менеджер по отмене является объектом платформы для записи изменений для возражения состоянию и более поздней отмене тех изменений по пользовательскому запросу. Менеджер по отмене, который является экземпляром NSUndoManager
класс, поведения и отмена и операции восстановления. Работа отмены возвращается изменение в свойстве объекта; если работа отмены имела место, работа восстановления восстанавливает исходное значение. Возможность выполнить отмену и операции восстановления является ценной и дифференцирующейся функцией приложений, особенно те, которые позволяют пользователям изменять данные экстенсивно.
Вы получаете менеджера по отмене через undoManager
свойство UIResponder
(iOS) или путем вызова undoManager
метод NSResponder
(OS X). Каждое окно приложения предоставляет менеджеру по отмене по умолчанию, несмотря на то, что можно создать частные для определенных контекстов.
Отмена и операции восстановления отправляют сообщения в измененный объект
Необходимо зарегистрировать работу отмены в менеджере по отмене. Когда менеджер по отмене выполняет работу, она отправляет сообщение, составленное из нескольких компонентов, предоставленных в регистрации:
Объект получить сообщение. Принимающий объект обычно является объектом, имеющим свойство, значение которого изменилось.
Подпись метода для вызова. Подпись часто идентифицирует метод доступа метода set.
Параметр сообщения. Параметром обычно является предыдущее значение изменившегося свойства. Для операций восстановления параметром является измененное значение.
Менеджер по отмене собирает все операции отмены, происходящие в единственном цикле цикла выполнения, такого как основной цикл событий приложения; выполнение работы отмены возвращается все изменения, произошедшие во время цикла. При выполнении работы отмены менеджер по отмене сохраняет операции, вернувшиеся так, чтобы пользователи могли восстановить то, что было отменено.
Отмена и операции восстановления помещаются на штабели
Менеджер по отмене хранит отмену и операции восстановления на штабелях первым пришел - последним вышел. Когда приложение сначала регистрирует работу отмены, менеджер по отмене добавляет его к стеку отмены. Стек повторного выполнения, однако, остается пустым, пока пользователь не запрашивает работу отмены. Когда это происходит, менеджер по отмене использует самую верхнюю группу операций на стеке отмены, чтобы составить и отправить одно или более сообщений для возвращения изменений.
Так как эти операции снова вызывают изменения в состоянии одного или более объектов, объекты регистрируют новые операции в менеджере по отмене, на сей раз в обратном направлении от исходных операций. Поскольку менеджер по отмене в настоящее время отменяет изменения, это записывает эти операции как операции восстановления на стеке повторного выполнения. Последующие операции восстановления вытягивают операции от стека повторного выполнения, применяют их к объектам и пододвигают их обратно на стек отмены. Поскольку новое изменение в состоянии объекта лишает законной силы предыдущее изменение, как только новая работа отмены регистрируется, менеджер по отмене очищает стек повторного выполнения.
Операции объединяются в Undo Groups
Менеджер по отмене собирает отмену и операции восстановления в группах, представляющих действия, которые являются полностью revertible. Группа обычно идентифицирует свойства, связанные в некотором роде. Это хранит эти группы операций как элементы на стеках отмены и стеках повторного выполнения. Даже единственное действие должно быть упаковано как группа. NSUndoManager
обычно создает группы отмены автоматически во время цикла цикла выполнения. В первый раз, когда просят записать работу отмены в цикле, это создает новую группу. Затем в конце цикла это закрывает группу. Можно создать дополнительные, вложенные группы отмены.
Как зарегистрировать и запросить операции отмены и восстановления
NSUndoManager
класс дает Вам два способа зарегистрировать операции отмены:
Для простой регистрации вызвать
registerUndoWithTarget:selector:object:
, который берет целевой объект, селектор и отдельный аргумент.Для основанной на вызове регистрации вызвать
prepareWithInvocationTarget:
, передача в aNSInvocation
объект, инкапсулирующий сообщение для посылания за возвращающимися изменениями. С этим подходом у Вас могут быть любое число и тип параметров.
Вы часто вызываете эти методы в методе доступа для свойства изменяющегося объекта. Для запроса отмены или работы восстановления отправить undo
или redo
обменивайтесь сообщениями к a NSUndoManager
объект.
Менеджер по отмене и цепочка респондента
Когда больше, чем менеджер по отмене по умолчанию находятся в игре, цепочка респондента играет важную роль в управлении отменой, особенно. Класс респондента или в UIKit или в платформах AppKit (UIResponder
или NSResponder
) объявляет undoManager
свойство и undoManager
метод, соответственно. Когда приложение получает событие отмены, класс респондента запускается с первого респондента и оттуда восстанавливает работоспособность поиск цепочки респондента NSUndoManager
объект (через undoManager
свойство или метод). Если конец цепочки респондента достигнут, объект окна создает и возвращает менеджера по отмене по умолчанию.
Если Вы хотите менеджера по отмене по определенному контексту в дополнение к менеджеру по отмене по умолчанию, Ваш подкласс респондента может реализовать undoManager
свойство или метод, чтобы создать и возвратить тот. Подкласс респондента часто является пользовательским представлением, но это может также быть, на iOS, контроллер представления (который должен гарантировать, что это становится первым респондентом). В OS X делегат объекта окна может реализовать windowWillReturnUndoManager:
возвратить менеджера по отмене.
Пользовательский интерфейс для запроса отмены и восстановления
Пользователи запрашивают отмену и восстанавливают операции в OS X и iOS по-разному. В приложении Mac пользователь выбирает команду меню Undo или Redo из меню Edit. В приложении для iOS пользователь встряхивает устройство. Для дрожащего движения функционировать как команду, applicationSupportsShakeToEdit
свойство UIApplication
должен быть установлен в YES
и в надлежащем состоянии должен быть менеджер по отмене. Если эти условия применяются, отображения приложения предупредительное представление с кнопками для отмены и восстановления. И в iOS и в OS X, можно дать определенные имена действия к отмене и восстановить команды — например, Изменение Цвета Отмены.