2010-07-16 58 views
1

我有一个工具栏项目包含一个视图(NSButton)和视图的目标设置为nil,所以它会在触发动作时查找响应者链。不过,我在尝试如何验证第一响应者时遇到了问题。验证NSToolbarItem与查看FirstResponder

我已经子类NSToolbarItem和实施-(void)validate。我发现的参考文献指出,您应该能够通过调用[[[self view] window] firstResponder]获得第一响应者,然后查看响应者链是否执行NSToolbarItemValidationNSUserInterfaceValidations并调用适当的验证方法。

但是,当我拨打[[self view] window]时,我回到nil作为窗口,所以我无法检索到第一个响应者。

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

在NSToolbar.h中,有一个引用了包含窗口的ivar,所以我可以通过调用[[[self toolbar] valueForKey:@"window"] firstResponder]找到第一个响应者,但这有点破解,我宁愿使用记录/稳定的东西。

回答

0

您不需要手动验证。应用程序为每个需要验证的菜单项或工具栏项调用响应程序链中每个对象的验证(或其适当的变体),直到它找到返回YES的项(或者说它支持每个菜单或工具栏项的动作),或者找不到一个。如果找到一个,您的工具栏项目或菜单项已启用。否则,它被禁用。至少,这是一般理论。

+0

对于包含视图的NSToolbarItem实例,您需要继承并提供-validate的实现。我试图找出当目标是第一响应者时(如'nil')如何编写该方法。 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Toolbars/Tasks/ValidatingTBItems.html#//apple_ref/doc/uid/20000753-BAJGFHDD – Jablair 2010-07-22 16:24:12