【问题标题】:How to enable undo menu item when a sheet is presented如何在显示工作表时启用撤消菜单项
【发布时间】:2015-01-13 21:15:56
【问题描述】:

我正在使用情节提要创建基于文档的核心数据 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 时,撤消/重做工作正常。我该如何解决这个问题?

【问题讨论】:

    标签: cocoa swift segue osx-yosemite nsstoryboard


    【解决方案1】:

    我遇到了同样的问题,并在这里发布以防它可能对某人有所帮助。我的解决方案是获取表单视图控制器所附加到的窗口的撤消管理器:

    let undoManager = self.view.window?.firstResponder?.undoManager
    

    self 在此上下文中是工作表的视图控制器,而不是工作表的父视图控制器。因此,分配将在工作表的视图控制器中进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多