将两个NSSplitViewController的子控制器都保留在第一响应者链中

Rem*_*tra 4 macos cocoa

我有一个基于文档的应用程序,其中NSSplitViewController作为主窗口的内容视图控制器。左窗格包含带有控制器的自定义视图,该视图实现了一些菜单命令。

右窗格包含带有控制器的标准NSTableView。当应用程序启动时,菜单命令会按预期工作,但是一旦选择了右表视图中的任何内容,菜单命令就会被禁用。

如何确保左窗格的视图控制器保留在第一响应者链中?

我尝试将菜单命令直接连接到正确的视图控制器,但是IB不允许连接到情节提要中的另一个场景。我只能连接到同一场景中的对象。

问候,

雷姆科·波尔斯特拉

Pie*_*ard 6

连接到第一响应者。

您可以通过在NSSplitViewController子类中实现-[NSResponderSupplementalTargetedAction:sender:]来使所有子视图控制器对动作做出响应:

- (id)supplementalTargetForAction:(SEL)action sender:(id)sender
{
    id target = [super supplementalTargetForAction:action sender:sender];

    if (target != nil) {
        return target;
    }

    for (NSViewController *childViewController in self.childViewControllers) {
        target = [NSApp targetForAction:action to:childViewController from:sender];

        if (![target respondsToSelector:action]) {
            target = [target supplementalTargetForAction:action sender:sender];
        }

        if ([target respondsToSelector:action]) {
            return target;
        }
    }

    return nil;
}
Run Code Online (Sandbox Code Playgroud)