我有一个包含视图的工具栏项(NSButton
),并且视图的目标设置为nil
,因此在触发操作时它会查找响应者链。不过,我在尝试如何验证第一响应者时遇到了麻烦。
我已经将NSToolbarItem子类化并实现了-(void)validate
。我发现的参考文献表明,您应该能够通过调用[[[self view] window] firstResponder]
来获取第一个响应者,然后查看响应者链是否实现NSToolbarItemValidation
或NSUserInterfaceValidations
并调用相应的验证方法
但是,当我拨打[[self view] window]
时,我正在返回nil
作为窗口,因此我无法检索第一个响应者。
我不确定它是否有所作为,但我在XIB中创建工具栏而不是在代码中编写它。
在NSToolbar.h中查看,有一个引用包含窗口的ivar,所以我可以通过调用[[[self toolbar] valueForKey:@"window"] firstResponder]
找到第一个响应者,但这有点像黑客,我更喜欢使用记录/稳定。
答案 0 :(得分:0)
您不手动验证。对于需要验证的每个菜单项或工具栏项,应用程序在响应程序链中的每个对象上调用-validate(或其相应的变体),直到找到返回YES的那个(意味着它支持每个菜单或工具栏项的操作) ),或找不到一个。如果找到,则启用工具栏项或菜单项。如果没有,则禁用。至少,这是一般理论。