gpt4 book ai didi

macos - Xcode 7 中的 NSToolbar 使用 Storyboard(NSWindowController -> NSSplitViewController)

转载 作者:IT王子 更新时间:2023-10-29 05:53:03 24 4
gpt4 key购买 nike

你好,我已经看到这个问题被问过几次了,但还没有明确的答案,所以我为 xcode 7 和 swift2 创建了它(无论如何这可能已经改变了一些东西)。

我使用 Xcode 7 和 Cocoa OSX Story boards + swift2 创建了一个项目,所以我的项目从一个连接到 NSViewController 的 NSWindowController 开始(正如预期的那样!)。我向我的窗口 Controller 添加了一个 NSToolbar,并向工具栏添加了一个 NSButton。我将我的 NSViewController 更改为新的 NSSplitViewController 之一,它链接到三个 NSViewController 并水平显示它们的 View - 带有垂直分隔线 - (类似于您在优胜美地 + 中的照片应用程序或页面)。我的最终目标是我的工具栏中的按钮显示和隐藏第一个拆分。

我的理解是,我希望为了实现这一点,我应该在 NSSplitViewController 中创建一个操作,或多或少地改变自动布局约束,它们在这里的工作方式:How to do collapse and expand view in mac application? .

然后以某种方式将此操作链接到工具栏中的 NSButton...它恰好在 NSWindowController 中(远在层次结构中并被隔离)...

我已经解决了有关 NSToolbar 和 Storyboard的其他问题,但未能实现我的目标:

  • YouTube 视频:Cocoa Programming L17 - NSToolbar这是我发现最接近解决问题的方法,但他的方法不适用于 Storyboard,只能创建你自己的 xib 文件。
  • 在这个问题中:How to use NSToolBar in Xcode 6 and Storyboard?一个人建议使用第一个应答器建立链接,并期望一切都在运行时连接起来(这看起来有点狡猾,而不是我认为苹果会实现它的方式......)。第二个人建议在 NSWindowController 中创建一个 View Controller 变量并从那里操作它的属性......但同样,也有点狡猾。

  • 我在那个问题中看到的一个最新评论似乎是解决问题的最佳方法(但仍然没有我想象的那么好)是将 NSObjectController 添加到每个场景,当场景加载时,将对象的值设置为另一个场景的 Controller 。这真的是最好的前进方式吗?如果是这样,我怎样才能实现这一目标?

Apple 在 WWDC15 中确实(再次)提到他们为 osx 和拥有 View Controller 的 Split View Controller 创建了 Storyboard,以便您可以将逻辑和工作转移到特定的 View Controller ,所以我期待在我的 Split View Controller 中执行所有操作,因为这是需要更改的目标。

有谁知道如何从 View Controller 本身实现这一点?我真的没能找到将我的 ToolBarItem 连接到它的方法。

最佳答案

好吧,我几天前就提出了这个问题,但到目前为止还没有答案,所以我用我最近为解决这个问题所做的工作来回答。

在我创建我的 Xcode 项目后,我这样做了:

  • 为 NSSplitViewController 创建了一个子类 MySplitViewController
  • 为每个 NSSplitViewItem 添加了一个 IBOutlet。例如:

    @IBOutlet weak var mySplitViewItem: NSSplitViewItem!

  • 为 NSWindowController 创建了一个子类 WindowController

  • 在链接到 NSToolbarItem(我的按钮)的 WindowController 类中添加了一个 IBAction
  • 添加了获取窗口 Controller 内容的属性,如 MySplitViewController

    var mySplitViewController: MySplitViewController { 返回 self.window?.contentViewController 作为!我的 Split View Controller

  • 现在我可以在我创建的操作中从窗口 Controller 访问 Split View Controller 的属性:

    我的 Split View Controller 。 mySplitViewItem.collapsed = true

我创建了一些示例代码来执行此操作(但是使用 View Controller 并更改标签的文本 here ,以防万一有人想看到具有此行为的工作项目。还有一个关于它的 blog post :)

关于macos - Xcode 7 中的 NSToolbar 使用 Storyboard(NSWindowController -> NSSplitViewController),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com