NSTabViewController add NSToolbarItems



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

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

现在我想将附加的 NSToolbarItems 添加到 NSTabViewController 的工具栏中?但是我还没有找到访问工具栏的方法。我还想在工具栏项之间添加空格。

有没有办法这样做?

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

问候

奥利弗


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

我创建了一个新的NSViewController,并在里面放了一个NSTabView。为了加载我已经存在的视图控制器,我使用了这个

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
}

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

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

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

例:

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

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

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

   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。

最新更新