我有一个基于文档的应用程序,其工具栏包含几个我需要验证的NSButton。基于其他代码,我已经将NSToolbar子类化了:
@interface CustomToolbar : NSToolbar
@end
@implementation CustomToolbar
-(void)validateVisibleItems
{
for (NSToolbarItem *toolbarItem in self.visibleItems)
{
NSResponder *responder = toolbarItem.view;
while ((responder = [responder nextResponder]))
{
if ([responder respondsToSelector:toolbarItem.action])
{
[responder performSelector:@selector(validateToolbarItem:) withObject:toolbarItem];
}
}
}
}
@end
MyDocument(文件的所有者)被设置为工具栏的委托。然而
- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem
永远不会打电话给。按钮上有一个动作设置,因此不确定为什么[responder respondsToSelector:toolbarItem.action]始终为false。
我尝试过对NSButton项进行子类化:
@interface DocumentToolbarActionItem : NSToolbarItem
@implementation DocumentToolbarActionItem
-(void)validate
{
Document* document = [[self toolbar] delegate];
[self setEnabled:[document validateUserInterfaceItem:self]];
}
@end
但这导致无休止的循环。
文档的validateUserInterfaceItem:方法适用于应用程序中的所有其他项目,我需要让我的工具栏按钮调用它来确定是否应该启用它们。
答案 0 :(得分:0)
我的猜测是您没有通过 [super validateVisibleItems]
调用,因此,通过响应者链失去了验证的超类行为。