Как установить идентификатор NSTabViewItem?

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

class OptionsTabViewController: NSTabViewController {
    override func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
        print(tabViewItem!.identifier)
    }
}

Это печатает то, что похоже на позиции памяти указателя:

Optional(0x608000100e10)
Optional(0x6080000c36b0)

Я предполагаю, что можно было бы установить эти идентификаторы где-нибудь в конструкторе интерфейсов, но я пробовал писать вещи в разных текстовых полях, помеченных как identifier и до сих пор получить эти значения позиции памяти в консоли.

Я также использовал print(tabViewItem!.label) но он печатает метку в кнопке вкладки.

Итак, как я могу установить этот идентификатор, чтобы иметь возможность распознавать, какое представление активно в компоненте представления вкладок?

1 ответ

Решение

Прежде всего, вы можете определить свой идентификатор (ы) следующим образом:

тогда в вашем коде вы можете определить enum для проверки текущей выбранной вкладки, сделайте что-то вроде:

enum YourTabs:String {
   case tab1
   case tab2
   case none
}

class ViewController: NSViewController, NSTabViewDelegate {
    @IBOutlet var tabView:NSTabView!

    public func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
        if let identifier = tabViewItem?.identifier as? String,
            let currentTab = YourTabs(rawValue: identifier) {
            switch currentTab {
            case .tab1:
                print("do something with tab1")
                break
            case .tab2:
                print("do something with tab2")
                break
            default:
                break
            }
        }
    }
}
Другие вопросы по тегам