0

我将标签栏视图实现为 NSControl 子类。

在此处输入图像描述

当我单击它时,AppKit 将尝试更新firstResponder我的 NSWindow。因为我不希望 tabbar 成为firstResponderacceptsFirstResponder返回NO) NSWindow 本身将成为firstResponder. 我的响应者链将由窗口及其控制器组成,并且不会将任何操作消息传递到选项卡栏下方的子视图(NSOutlineView)。当我单击标签栏时,我希望 NSOutlineView 继续接收操作消息和事件。

这样做的适当方法是什么?有没有办法阻止 NSView 尝试更改firstResponder被点击的时间?

我考虑过将工具栏设置为 NSOutlineView,但Apple 不建议nextResponder手动更改NSView。nextResponder

4

1 回答 1

0

我最终firstResponder在标签栏的委托方法实现中手动将其重置为大纲视图。

我想出的另一个解决方案是在 tabbar 中实现它以重置firstResponder为原始对象,如果 tabbar 变为firstResponder.

- (void)awakeFromNib {
    [self.window addObserver:self
                  forKeyPath:@"firstResponder"
                     options:NSKeyValueObservingOptionOld
                     context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
                        change:(NSDictionary *)change context:(void *)context {
    NSResponder *oldResponder = [change objectForKey:NSKeyValueChangeOldKey];
    if (self.window.firstResponder == self) {
        [self.window makeFirstResponder:oldResponder];
    }
}
于 2012-05-22T19:00:49.970 回答