首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSControl子类不应更改firstResponder

NSControl子类不应更改firstResponder
EN

Stack Overflow用户
提问于 2012-05-23 02:07:57
回答 1查看 399关注 0票数 0

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

当我单击它时,AppKit将尝试更新我的NSWindow的firstResponder。因为我不希望选项卡栏变成firstResponder (acceptsFirstResponder返回NO),所以NSWindow本身将变成firstResponder。我的响应器链将由窗口和它的控制器组成,没有动作消息被传递到选项卡栏下面的子视图(一个NSOutlineView)。我希望当我单击选项卡栏时,NSOutlineView能够继续接收操作消息和事件。

做这件事的合适方式是什么?有没有办法阻止NSView在被点击时尝试更改firstResponder

我考虑过将工具栏的nextResponder设置为NSOutlineView,但苹果并不建议手动更改NSView的nextResponder

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-23 03:00:50

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

我想出的另一个解决方案是在选项卡栏中实现此功能,以便在选项卡栏变成firstResponder时将firstResponder重置为原始对象。

代码语言:javascript
复制
- (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];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10707590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档