【问题标题】:How to set the identifier of an NSTabViewItem?如何设置 NSTabViewItem 的标识符?
【发布时间】:2018-01-22 04:44:36
【问题描述】:

我想知道NSTabView 何时切换到特定视图。为此,我使用我的自定义类扩展了NSTabViewController,以便能够充当委托:

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

这会打印出指针内存位置的样子:

Optional(0x608000100e10)
Optional(0x6080000c36b0)

我想应该可以在界面生成器中的某处设置这些标识符,但我尝试在标记为 identifier 的不同文本字段中编写内容,并且仍然在控制台中获得这些内存位置值。

我也使用过print(tabViewItem!.label),但它会在标签按钮中打印标签。

那么如何设置该标识符以能够识别选项卡视图组件中哪个视图处于活动状态?

【问题讨论】:

    标签: swift xcode macos cocoa nstabview


    【解决方案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
                }
            }
        }
    }
    

    【讨论】:

    • 参数tabViewItem是被选中的标签视图项。使用tabViewItem 而不是tabView.selectedTabViewItem
    • 谢谢。您发布的图像在属性检查器中,因为我正在查看身份检查器,所以我完全错过了。
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多