0

我想使用 NSTabViewController 来切换具有工具栏样式的 6 个不同选项卡。

所有选项卡的共同点是它们显示客户实体的不同方面。

现在我想向 NSTabViewController 的工具栏添加额外的 NSToolbarItems?但是我还没有找到访问工具栏的方法。我还想在 ToolbarItems 之间添加空格。

有没有办法这样做?

或者如何在不使用 NSTabViewController 的情况下将我的 ViewController 从 Storyboard 添加到 NSTabView?

问候

奥利弗


与此同时,我尝试了另一种我认为更有希望但导致另一种奇怪行为的方法:

我创建了一个新的 NSViewController 并在里面放了一个 NSTabView。为了加载我已经存在的 ViewControllers 我使用了这个

override func viewDidLoad() {
    super.viewDidLoad()
    let customerController = self.storyboard?.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("CustomerVCID")) as! CustomerViewController

    let servicesController = self.storyboard?.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("ServicesVCID")) as! ServicesController

    customerController.customer = self.customer
    servicesController.customer = self.customer

    self.tabView.tabViewItems[0].view = customerController.view
    self.tabView.tabViewItems[1].view = servicesController.view

}

这确实有效,但现在我所有具有操作的 NSButton 都会导致我的应用程序崩溃。

4

1 回答 1

1

每个窗口只有一个工具栏。所以你NSTabViewController分享它。

  1. 选择工具栏模式NSTabViewController
  2. 覆盖NSWindowController并添加您的项目

例子:

  override func windowDidLoad() {
      super.windowDidLoad()
      window?.toolbar?.insertItem(withItemIdentifier: .print, at: 0)
  }

您始终可以通过以下路径视图->窗口->工具栏访问您的工具栏

您唯一的问题是delegate每个NSToolbar. 这意味着您必须在NSToolbarItem内部NSTabViewController委托中创建自定义。

   override func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
        if itemIdentifier == .export {
            return ExportToolbarItem.new()
        } else {
            return super.toolbar(toolbar, itemForItemIdentifier: itemIdentifier, willBeInsertedIntoToolbar: flag)
        }
    }

请记住,您需要拨打超级电话。这是因为底层方法想要创建绑定到视图控制器。如果您需要工具栏中的可操作按钮,只需添加它们而不调用 super。

于 2020-04-20T09:00:54.783 回答