如何从菜单项创建 'sheet' segue
How to create 'sheet' segue from a Menu Item
我有一个 Swift Cocoa 应用程序可以从菜单项中选择一个视图。
当我从界面生成器创建 segue 时,选项是:
显示、模态和自定义。
然而,当我通过按钮创建 segue 时,会出现更多选项:
sheet、弹出窗口、显示、自定义、模态
我需要从该菜单项创建一个 sheet segue。
我错过了什么吗?或者仅从菜单项中禁用这些额外选项
你没有遗漏任何东西。我解决这个问题的方法是选择一个 segue 选项,然后使用更改编辑器打开更改后的故事板,以找到为 segue 更改的确切位置。当以 XML 打开时,这很容易看到。然后我手动将 segue 编辑为 "sheet"。保存故事板,一切正常。
Sheet 无法从菜单项启用 segue,因为它没有任何意义。一个 segue 代表了一种让某些东西从给定的 UI 元素出现到另一个元素的方法。
您根本无法使菜单项中的 window 或其他任何内容显示为 sheet;这没有任何意义。
如果 sheet 只能出现在一个 view/window 中,请从这个 view/window 进行 sheet 转场,然后在您的菜单项中调用 performSegue:
使用您的 segue 名称执行操作。
否则,您不应该使用 segue 并通过一些代码使 sheet 出现。
Segues 在 iOS 上特别有用,其中从一个视图到另一个视图的转换通常只从一个地方触发。不过,在 Mac OS 上,有更多的自由和可能性。 Segues 没那么有用。
感谢您的提示。
但是我需要 segue,因为它与应用程序中的 "import" 选项有关
此外,经过一些研究,我发现 "sheet" segue 需要附加 window,而菜单与任何 window 无关。
这就是为什么当我尝试从按钮创建 segue 时出现该选项的原因,因为按钮在视图内,视图也在 window.
内
解决方案与Frizlab所说的有关,segue必须附加到可以显示它的view/window,然后在单击菜单时执行该segue
正如其他人所说,菜单项无法执行依赖于 window 的任何附件的转场。不幸的是,在某些情况下您确实想要从菜单项触发 "sheet" segue。例如,Xcode 本身就是这样做的。 Xcode window 最左下角的 + 将打开一个 three-item 菜单,所有菜单都执行 "sheet" segue。
一个选项是定义两个情节提要场景之间的转场,给转场一个标识符,然后以编程方式执行转场。
单击您的第一个场景,然后在场景的 header 中查找视图控制器图标。它是一个包含白色方块的蓝色圆圈。
control-drag 从那个 View Controller 图标到第二个场景(你想在 sheet 中显示的场景)。应该在两个场景之间创建一个 segue。这个 segue 将提供完整的 segue 类型,包括 "Sheet".
select 新的转场并显示属性检查器。给 segue 一个标识符,例如"ShowEditView"
手动触发转场。作为一个简单的测试,将一个按钮拖到场景一上,并将其连接到您的场景一视图控制器:
@IBAction func wasClicked(sender: AnyObject) {
print("Test button was clicked.")
self.performSegueWithIdentifier("ShowEditView", sender: self)
}
仅故事板解决方案
- 在主视图中添加一个
NSStackView
。将其标记为对属性检查器隐藏
- 向这个隐藏的 NSStackView 添加一个 NSButton
- 控制从
NSMenuItem
到 NSButton
的拖动(来自第 2 步)
- 拖动结束时会出现一个菜单,select
performClick:
。这将模拟鼠标点击 NSButton
- 控件从 NSButton 拖动到视图,现在可以在菜单中看到 sheet 选项。
- 完成!!
注意:为每个要从 NSMenu 显示为 Sheet 的视图向隐藏的 NSStackView 添加一个 NSButton
。
我有一个 Swift Cocoa 应用程序可以从菜单项中选择一个视图。 当我从界面生成器创建 segue 时,选项是: 显示、模态和自定义。
然而,当我通过按钮创建 segue 时,会出现更多选项: sheet、弹出窗口、显示、自定义、模态
我需要从该菜单项创建一个 sheet segue。 我错过了什么吗?或者仅从菜单项中禁用这些额外选项
你没有遗漏任何东西。我解决这个问题的方法是选择一个 segue 选项,然后使用更改编辑器打开更改后的故事板,以找到为 segue 更改的确切位置。当以 XML 打开时,这很容易看到。然后我手动将 segue 编辑为 "sheet"。保存故事板,一切正常。
Sheet 无法从菜单项启用 segue,因为它没有任何意义。一个 segue 代表了一种让某些东西从给定的 UI 元素出现到另一个元素的方法。
您根本无法使菜单项中的 window 或其他任何内容显示为 sheet;这没有任何意义。
如果 sheet 只能出现在一个 view/window 中,请从这个 view/window 进行 sheet 转场,然后在您的菜单项中调用 performSegue:
使用您的 segue 名称执行操作。
否则,您不应该使用 segue 并通过一些代码使 sheet 出现。
Segues 在 iOS 上特别有用,其中从一个视图到另一个视图的转换通常只从一个地方触发。不过,在 Mac OS 上,有更多的自由和可能性。 Segues 没那么有用。
感谢您的提示。
但是我需要 segue,因为它与应用程序中的 "import" 选项有关
此外,经过一些研究,我发现 "sheet" segue 需要附加 window,而菜单与任何 window 无关。 这就是为什么当我尝试从按钮创建 segue 时出现该选项的原因,因为按钮在视图内,视图也在 window.
内解决方案与Frizlab所说的有关,segue必须附加到可以显示它的view/window,然后在单击菜单时执行该segue
正如其他人所说,菜单项无法执行依赖于 window 的任何附件的转场。不幸的是,在某些情况下您确实想要从菜单项触发 "sheet" segue。例如,Xcode 本身就是这样做的。 Xcode window 最左下角的 + 将打开一个 three-item 菜单,所有菜单都执行 "sheet" segue。
一个选项是定义两个情节提要场景之间的转场,给转场一个标识符,然后以编程方式执行转场。
单击您的第一个场景,然后在场景的 header 中查找视图控制器图标。它是一个包含白色方块的蓝色圆圈。
control-drag 从那个 View Controller 图标到第二个场景(你想在 sheet 中显示的场景)。应该在两个场景之间创建一个 segue。这个 segue 将提供完整的 segue 类型,包括 "Sheet".
select 新的转场并显示属性检查器。给 segue 一个标识符,例如"ShowEditView"
手动触发转场。作为一个简单的测试,将一个按钮拖到场景一上,并将其连接到您的场景一视图控制器:
@IBAction func wasClicked(sender: AnyObject) { print("Test button was clicked.") self.performSegueWithIdentifier("ShowEditView", sender: self) }
仅故事板解决方案
- 在主视图中添加一个
NSStackView
。将其标记为对属性检查器隐藏 - 向这个隐藏的 NSStackView 添加一个 NSButton
- 控制从
NSMenuItem
到NSButton
的拖动(来自第 2 步) - 拖动结束时会出现一个菜单,select
performClick:
。这将模拟鼠标点击 NSButton - 控件从 NSButton 拖动到视图,现在可以在菜单中看到 sheet 选项。
- 完成!!
注意:为每个要从 NSMenu 显示为 Sheet 的视图向隐藏的 NSStackView 添加一个 NSButton
。