Я просто пытаюсь отменить действия, которые пользователь выполняет в моем приложении. По умолчанию любое редактирование текста, которое делает пользователь, имеет преимущество отмены, но любые действия, которые выполняются иначе (из моего кода), этого не делают.
Я вижу, что в документации объясняется, что мне нужно получить экземпляр NSUndoManager и вызвать registerUndoWithTarget, но я застрял на первом шаге: получить undoManager из моего ViewController. Поскольку ViewController является UIResponder, я попробовал это:
if let undoManager = self.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
Поскольку эта привязка возвращает nil, я подумал, что, возможно, ViewController не имеет undoManager, поэтому я искал его в окне:
if let window = NSApplication.sharedApplication().mainWindow {
if let undoManager = window.undoManager {
undoManager.registerUndoWithTarget(self, selector: Selector("removeLatestEntry:"), object: "test")
}
}
Увы, привязка окна также возвращает nil. Извините, я очень новичок в этом. Может кто-то указать мне верное направление? Должен ли я реализовать свой собственный undoManager или что-то в этом роде? Где-то явно есть undoManager, потому что все, что пользователь делает вручную в моем текстовом поле, получает поведение отмены. Похоже, это будет синглтон, к которому я мог бы легко получить доступ из ViewController.
-- Редактировать: Кстати, приведенный выше код был помещен в viewDidLoad, а removeLatestEntry — это просто функция в моем ViewController, которая принимает строку и печатает ее в этот момент.