NSTabViewController добавляет NSToolbarItems

Я хотел бы использовать NSTabViewController для переключения между 6 различными вкладками со стилем панели инструментов.

Общим для всех вкладок является то, что они показывают различные аспекты сущности клиента.

Теперь я хочу добавить дополнительные NSToolbarItems на панель инструментов NSTabViewController? Но я не нашел способ получить доступ к панели инструментов. Я также хотел бы добавить пробел между элементами панели инструментов.

Есть ли способ сделать это?

Или как я могу добавить свой ViewController из раскадровки в NSTabView без использования NSTabViewController?

С Уважением

Оливер


Тем временем я попробовал другой подход, который мне показался более многообещающим, но привел к другому странному поведению:

Я создал новый 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

}

Это действительно сработало, но теперь все мои NSButtons, у которых есть действия, вызовут сбой моего приложения.


person Oliver Koehler    schedule 08.11.2017    source источник
comment
Просто идея: используйте NSTabViewController без вкладок и создайте собственную панель инструментов.   -  person Willeke    schedule 09.11.2017
comment
У вас могут быть следующие стили в NSTabViewController: * Вкладки сверху * Вкладки внизу * Панель инструментов * Не указано Итак, как я смогу иметь NSTabViewController без вкладок???   -  person Oliver Koehler    schedule 10.11.2017
comment
Что делает tabstyle Unspecified?   -  person Willeke    schedule 10.11.2017
comment
То же, что и вкладки сверху   -  person Oliver Koehler    schedule 10.11.2017
comment
В документации говорится о неуказанном: стиль, указывающий, что контроллер представления вкладок не предоставляет пользовательский интерфейс выбора вкладок. Ваше приложение предоставляет элемент управления (например, NSSegmentedControl или NSPopUpButton) для навигации между вкладками.   -  person Willeke    schedule 10.11.2017


Ответы (1)


В каждом окне есть только одна панель инструментов. Итак, ваш NSTabViewController разделяет его.

  1. Выберите режим панели инструментов NSTabViewController
  2. Переопределите NSWindowController и добавьте свои элементы

Пример:

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

Вы всегда можете получить доступ к своей панели инструментов, пройдя по следующему пути: view->window->toolbar

Ваша единственная проблема в том, что есть один 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. Это связано с тем, что базовый метод хочет создать привязки к контроллеру представления. Если вам нужны активные кнопки на панели инструментов, просто добавьте их, не вызывая super.

person Marek H    schedule 20.04.2020