NSTableView 响应面板中的第一次单击

Posted

技术标签:

【中文标题】NSTableView 响应面板中的第一次单击【英文标题】:NSTableView responding to first click in a panel 【发布时间】:2021-12-04 17:10:26 【问题描述】:

我在 Interface Builder 中注意到,如果我想单击或从 Library 面板中拖动,我只需单击一次,即使 Library 面板没有当前焦点。

我正在尝试构建一个行为相似的面板。

有没有什么简单的方法可以让 NSTableView 接受点击,即使窗口没有焦点?

谢谢。

【问题讨论】:

【参考方案1】:

好的,我找到了答案。在 awakeFromNib 内部,我称之为: [self setBecomesKeyOnlyIfNeeded:YES];

它似乎可以解决问题。它与 Interface Builder 稍有不同,其中 Panel 实际上只需单击一下即可同时获得焦点,但这样做正是我想要的。

【讨论】:

很高兴它成功了。我在下面的回答将使您在单击的同时集中注意力,并且适用于任何视图,而不仅仅是 NSPanels。但是,如果这满足您的需求,那么它显然要简单得多,并且不会从当前 keyWindow 窃取键盘焦点(这取决于您的需要是好是坏)。 您是否必须在 XIB 文件或代码中设置其他任何内容?我试图让它与 NSCollectionView 一起工作,但到目前为止完全失败了。 抱歉这么久才回复...我刚刚注意到这条评论。您是否尝试过“setBecomesKeyOnlyIfNeeded”?没用吗? @BenGottlieb 为您提供 NSCollectionView,确保集合视图和其中的每个视图(标签、图像视图等)也实现 acceptsFirstMouse return YES; NSOutlineView 上覆盖acceptsFirstMouse 对我没有任何影响。这个解决方案奏效了。【参考方案2】:

您的视图应覆盖-acceptsFirstMouse: 以返回YES(或评估传递给您的事件以确定返回什么)。当然,您必须继承 NSTableView 才能做到这一点。

【讨论】:

我最终不必这样做,只需设置表格所在面板的“becomesKeyOnlyIfNeeded”属性。但感谢您的回答。

以上是关于NSTableView 响应面板中的第一次单击的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 响应式面板

根据表中的行数调整 NSTableView 或 NSScrollView 的大小

NSTableView 并在列标题问题中显示排序图像

NSTableView 和 NSOutlineView 在 tab 键上编辑

NSTableView 假装处于活动状态

单击滑动面板中的子项首先触发父项?