1

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

我已经将 NSToolbarItem 子类化并实现了-(void)validate. 我发现的参考资料说您应该能够通过调用来获得第一个响应者[[[self view] window] firstResponder],然后查看响应者链是否实现NSToolbarItemValidationorNSUserInterfaceValidations并调用适当的验证方法。

但是,当我调用 时[[self view] window],我将nil作为窗口返回,因此我无法检索到第一响应者。

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

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

4

1 回答 1

0

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

于 2010-07-21T23:57:04.440 回答