Невозможно изменить NSTabViewItem - PullRequest
0 голосов
/ 24 июня 2018

Возможно, я заблудился в стакане воды, так как я не опытный разработчик, но я не могу реализовать простое переопределение, чтобы изменить размер элемента NSTabView.

  • У меня есть контроллер представления вкладок (Стиль = панель инструментов)
  • У меня есть вид вкладки Tabless
  • У меня есть 3 Tab Tab. Для тестирования я отнес только одного из них к подклассу ниже

Я создал новый подкласс NSTabViewItem: MyTabViewItem и вложил в одну из трех закладок Элементы. Код:

import Cocoa

class MyTabViewItem: NSTabViewItem {

    override func drawLabel(_ shouldTruncateLabel: Bool, in labelRect: NSRect) {

        var size = self.sizeOfLabel(false)
        size.width = 180 
        print("Draw!!")         
    }


    override func sizeOfLabel(_ computeMin: Bool) -> NSSize {

        var size = super.sizeOfLabel(false)      
        size.width = 180      
        print("Draw!!")
        return size      
    }       
}

Все работает, кроме подклассов. Появляются вкладки, они работают, переключая представления, и программа запускается как надо. За исключением того, что он не меняет размер элемента Tab. Код в подклассе MyTabViewItem никогда не достигается (он никогда не печатает Draw !!, как следует.

Я не могу понять, чего мне здесь не хватает. Я не читал ни о каком соединении IB, чтобы сделать (и я не могу быть в состоянии соединить Элементы Tab в любом случае). Пожалуйста, извинитесь, если это тривиальный вопрос, но я искал везде и не нашел ничего, чтобы помочь мне.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Я также подклассифицировал NSTabViewController следующим образом:

import Cocoa

class MyTabViewController: NSTabViewController {

    @IBOutlet weak var TradingTabItem: MyTabViewItem!

    override func viewDidLoad() {
        super.viewDidLoad()
        print("Loaded Tab View")
        TradingTabItem.label = "New"

        // Do view setup here.

    }

}

В настоящее время происходит то, что элемент вкладки в моем подклассе (единственный из 3 подклассов) меняет строку метки на New.Однако, даже если я добавил элемент как IBOutlet здесь, он все равно не изменит захват (и переопределенная функция sizeOfLabel не будет достигнута).

0 голосов
/ 24 июня 2018

Вы сказали:

  • У меня есть вид вкладки Таблицы

Это ваша проблема.NSTabView только запрашивает от NSTabViewItem до drawLabel, если сам NSTabView отвечает за рисование панели вкладок, но у вас есть представление вкладки «Таблицы».(«Таблица» - это стиль по умолчанию при перетаскивании NSTabViewController в раскадровку.)

Вы также сказали:

  • У меня есть контроллер представления вкладок (стиль= панель инструментов)

Так что вы даже не хотите, чтобы представление вкладок рисовало панель вкладок;Вы хотите, чтобы элементы на панели инструментов окна выбирали вкладки (как в окне настроек Xcode).

Ваша способность настраивать элементы панели инструментов, созданные для ваших вкладок, ограничена.Вы можете создать подкласс NSTabViewController и переопределить toolbar:itemForItemIdentifier:willBeInsertedIntoToolbar:, например так:

override func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
    let toolbarItem = super.toolbar(toolbar, itemForItemIdentifier: itemIdentifier, willBeInsertedIntoToolbar: flag)
    if
        let toolbarItem = toolbarItem,
        let tabViewItem = tabViewItems.first(where: { ($0.identifier as? String) == itemIdentifier.rawValue })
    {
        toolbarItem.label = "\(tabViewItem.label) ?"
    }
    return toolbarItem
}

Но я обнаружил, что другие изменения не сработали:

  • Настройка toolbarItem.imageу меня не получилось.
  • Установка toolbarItem.view заставила элемент перестать получать клики.

Обратите внимание, что свойства minSize и maxSize используются только если toolbarItem.view установлено.

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

...