我实现了一个选项卡栏视图作为NSControl子类。

当我单击它时,AppKit将尝试更新我的NSWindow的firstResponder。因为我不希望选项卡栏变成firstResponder (acceptsFirstResponder返回NO),所以NSWindow本身将变成firstResponder。我的响应器链将由窗口和它的控制器组成,没有动作消息被传递到选项卡栏下面的子视图(一个NSOutlineView)。我希望当我单击选项卡栏时,NSOutlineView能够继续接收操作消息和事件。
做这件事的合适方式是什么?有没有办法阻止NSView在被点击时尝试更改firstResponder?
我考虑过将工具栏的nextResponder设置为NSOutlineView,但苹果并不建议手动更改NSView的nextResponder。
发布于 2012-05-23 03:00:50
在我的标签栏的委托方法实现中,我最终手动将firstResponder重置为outline视图。
我想出的另一个解决方案是在选项卡栏中实现此功能,以便在选项卡栏变成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];
}
}https://stackoverflow.com/questions/10707590
复制相似问题