我正在使用故事板创建基于文档的核心数据OSX应用程序。撤消和重做工作正常,直到我在带有segue的工作表中呈现视图控制器。显示工作表后,撤消/重做按钮将显示为灰色。
在搜索可能的解决方案时,我遇到了this article,他们说我必须使用“windowWillReturnUndoManager:”委托方法向窗口提供撤消管理器。所以我在我的segue的sourceController中实现了这个方法,并将该控制器设置为prepareForSegue方法中destinationController窗口的委托,如下所示:
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
super.prepareForSegue(segue, sender: sender)
(segue.destinationController as NSViewController).view.window?.delegate = self
}
func windowWillReturnUndoManager(window: NSWindow) -> NSUndoManager? {
println(undoManager)
return undoManager
}
但是当我打开工作表时,撤消和重做按钮仍然显示为灰色。请注意,将segue样式更改为popover时,undo / redo工作正常。我该如何解决这个问题?
我有同样的问题,我发布在这里,以防它可以帮助某人。我的解决方案是获取工作表视图控制器所连接的窗口的撤消管理器:
let undoManager = self.view.window?.firstResponder?.undoManager
此上下文中的self
是工作表的视图控制器,而不是工作表的父视图控制器。因此,分配将在工作表的视图控制器中进行。