我有几个选项卡的主要NSTabViewController:

class MainTabViewController: NSTabViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
    }

    override func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
        print(tabView)// returns <NSTabView: 0x101e17a10> but what to do with it ?
    }

}

我想检查每个NSViewController,如果变量hasChangestrue,然后 pop 消息:



如果我在MainTabViewController中对此进行检查,我会得到<NSTabView: 0x101e17a10>及其处理方法,我不知道。

如果我尝试在NSTabViewDelegate中使用MyViewController,那么我不知道如何在其中委派MainTabViewController。附在哪里?
class MyViewController: HIDNSViewController {
    func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
        //Never called
    }
}

最佳答案

0x101e17a10是tabView对象指向的NSTabView实例的地址。您需要在didSelect方法中打印tabView 标识符

您需要在“界面生成器”中设置标识符:

swift -  cocoa 委托(delegate)nstabviewcontroller-LMLPHP

然后(例如):

override func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
    if tabView.selectedTabViewItem?.identifier! as! String == "1" {
        print("FIRST VC")
    } else {
        print("SECOND VC")
    }
}

制表时的输出:

swift -  cocoa 委托(delegate)nstabviewcontroller-LMLPHP

07-27 21:32