Objective c Cocoa-查找NSTabView何时更改了其选项卡

Objective c Cocoa-查找NSTabView何时更改了其选项卡,objective-c,cocoa,nsnotifications,nstabview,Objective C,Cocoa,Nsnotifications,Nstabview,如何确定何时更改了NSTabViewItem,即用户更改了NSTabView的视图 理想情况下,我希望生成一个通知,但任何解决方案都是受欢迎的。我的原始答案建议观察NSTabView的selectedTabViewItem,但这似乎不起作用(在测试中,我只能让它观察nskeyvalueobservingoptionial) 一个可能更聪明的解决方案是使用委托。在相关控制器中实现tabView:didselecttabview项目: 文档。以下是Swift 3中的一个示例 为充当NSTabView

如何确定何时更改了NSTabViewItem,即用户更改了NSTabView的视图


理想情况下,我希望生成一个通知,但任何解决方案都是受欢迎的。

我的原始答案建议观察
NSTabView的
selectedTabViewItem
,但这似乎不起作用(在测试中,我只能让它观察
nskeyvalueobservingoptionial

一个可能更聪明的解决方案是使用委托。在相关控制器中实现
tabView:didselecttabview项目:


文档。

以下是Swift 3中的一个示例

为充当
NSTabView
委托的
NSTabView控制器创建自定义类。
NSTabViewController
类已经实现了
NSTabViewDelegate
协议

class CustomTabViewController: NSTabViewController {
    override func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
        let identifier = tabViewItem?.identifier as? String
        print(identifier)
    }

}
然后在Interface Builder中:

  • 在右侧面板的Identity Inspector中将创建的自定义类指定给选项卡视图控制器
  • 在左侧的界面层次面板中,控制从选项卡视图拖动到自定义选项卡视图控制器(名称将取决于自定义类),并从出现的小弹出窗口中选择
    delegate

  • 您也可以在您的委托中实现其他方法,您的意思是:[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(stvi:)name:@“selectedTabViewItem”对象:nil];“stvi”是正在调用的方法。。在这种情况下,它不起作用,没有发布任何通知。感谢您的回复,不幸的是,我收到了错误“NSTabView”可能没有响应“-addObserver:forKeyPath:context:”任何想法?另外,当您提到绑定时,您通常会绑定到什么选项卡视图?我正在使用OS X,因此iOS问题到目前为止还不是问题。关于绑定:您将一个属性绑定到另一个属性,以便控制器对象中的属性可以根据视图中的
    selectedTabViewItem
    自动更改其值。然后,您可以观察控制器属性,或者在其setter方法中执行一些有用的操作。完全更改了我的答案-很抱歉出现任何混淆。