使用View对FirstResponder验证NSToolbarItem

时间:2010-07-16 17:13:15

标签: objective-c cocoa macos nstoolbaritem

我有一个包含视图的工具栏项(NSButton),并且视图的目标设置为nil,因此在触发操作时它会查找响应者链。不过,我在尝试如何验证第一响应者时遇到了麻烦。

我已经将NSToolbarItem子类化并实现了-(void)validate。我发现的参考文献表明,您应该能够通过调用[[[self view] window] firstResponder]来获取第一个响应者,然后查看响应者链是否实现NSToolbarItemValidationNSUserInterfaceValidations并调用相应的验证方法

但是,当我拨打[[self view] window]时,我正在返回nil作为窗口,因此我无法检索第一个响应者。

我不确定它是否有所作为,但我在XIB中创建工具栏而不是在代码中编写它。

在NSToolbar.h中查看,有一个引用包含窗口的ivar,所以我可以通过调用[[[self toolbar] valueForKey:@"window"] firstResponder]找到第一个响应者,但这有点像黑客,我更喜欢使用记录/稳定。

1 个答案:

答案 0 :(得分:0)

您不手动验证。对于需要验证的每个菜单项或工具栏项,应用程序在响应程序链中的每个对象上调用-validate(或其相应的变体),直到找到返回YES的那个(意味着它支持每个菜单或工具栏项的操作) ),或找不到一个。如果找到,则启用工具栏项或菜单项。如果没有,则禁用。至少,这是一般理论。