如何验证NSToolbar中的NSButton?

时间:2016-11-08 16:29:29

标签: validation cocoa nsbutton nstoolbar

我有一个基于文档的应用程序,其工具栏包含几个我需要验证的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:方法适用于应用程序中的所有其他项目,我需要让我的工具栏按钮调用它来确定是否应该启用它们。

1 个答案:

答案 0 :(得分:0)

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