我将tabbar视图实现为NSControl子类。
当我点击它时,AppKit会尝试更新我的NSWindow的firstResponder
。由于我不希望标签栏变为firstResponder
(acceptsFirstResponder
返回NO
),因此NSWindow本身将成为firstResponder
。我的响应者链将由窗口和它的控制器组成,并且没有动作消息被传递到标签栏下面的子视图(NSOutlineView)。我希望NSOutlineView在单击标签栏时继续接收操作消息和事件。
这样做的恰当方法是什么?是否无法阻止NSView在单击时尝试更改firstResponder
?
我考虑过将工具栏的nextResponder
设置为NSOutlineView,但Apple不建议手动更改NSView的nextResponder
。
答案 0 :(得分:0)
我最终在我的标签栏的委托方法实现中手动将firstResponder
重置为大纲视图。
我提出的另一个解决方案是在标签栏中实现此功能,以便在标签栏变为firstResponder
的情况下将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];
}
}