我如何在NSToolbar中验证NSButton



我有一个基于文档的应用程序的工具栏包含几个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。

我已经尝试子类化NSButton项目:

@interface DocumentToolbarActionItem : NSToolbarItem
@implementation DocumentToolbarActionItem
-(void)validate
{
    Document* document = [[self toolbar] delegate];
    [self setEnabled:[document validateUserInterfaceItem:self]];
}
@end

但是这会导致一个无限循环。

文档的validateUserInterfaceItem:方法适用于应用程序中的所有其他项目,我需要我的工具栏按钮调用它来确定它们是否应该启用

我的猜测是,您没有通过[super validateVisibleItems]调用,因此,通过响应器链失去验证的超类行为。

相关内容

  • 没有找到相关文章

最新更新