问题标签 [nsresponder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1593 浏览

cocoa - Cocoa NSApplication 未激活但接收鼠标事件

我有一个奇怪的问题,我点击远离我的窗口。它放弃了主要和关键。然后我点击回到它,点击的视图不响应鼠标点击。但是第二次单击确实会导致视图响应。好像在第一次单击期间,窗口不是键,单击导致它成为键并能够处理第二次单击。

我进行了子类化NSApplication和拦截sendEvent:,以查看我的应用程序是否在第一次单击事件期间获取了事件,并且确实如此。此外,我转储了响应者链,发现我的视图确实在链中,但直到第二次单击,窗口才成为关键。我还注意到,当我收到第一个点击事件时,应用程序甚至都没有处于活动状态。这怎么可能?应用程序在收到鼠标事件时不应该激活吗?鸡蛋...

有什么想法/建议吗?

更新:通读文档后,我发现:

当用户在光标位于视图对象上时按下鼠标按钮时,会发送鼠标按下事件。如果包含视图的窗口不是关键窗口,则该窗口成为关键窗口并丢弃鼠标按下事件。但是,视图可以通过覆盖 NSView 的acceptsFirstMouse: 方法以返回YES 来规避这种默认行为。

所以这似乎是正在发生的事情。acceptsFirstMouse:但是,我尝试覆盖acceptsFirstResponder但无济于事。我的观点仍然不是“接受第一只鼠标”。

谢谢!

0 投票
1 回答
1110 浏览

cocoa - 是否有 NSResponder 委托之类的东西?

在我的应用程序菜单上的 Cocoa 应用程序中,有一个菜单项“删除”,它向delete:第一响应者发送消息。现在,我将键盘焦点放在 a 上NSOutlineView,在这种情况下,它是第一响应者。缺少子类化NSOutlineView,有没有办法处理delete:传递给它的消息?无论是协议NSOutlineViewDelegate还是NSOutlineViewDataSource协议似乎都没有为处理这些操作定义任何有趣的东西。

0 投票
1 回答
1021 浏览

objective-c - Objective-C:在按下另一个键时检测“shift”按键

这是为了实现一个基于键盘的游戏控制器。左/右箭头使角色行走。shift+left/right 使角色运行。

这是我到目前为止使用的代码:

如果在按下箭头键之前按下 shift,这将正常工作。但是如果按下箭头键并且你需要加速,按下 shift 不会导致任何事情发生......

所以,我看到了这样的答案: https ://stackoverflow.com/a/420691/987818

但我不明白这个 NSResponder 在哪里使用。对于信息,我使用 Cocos2D(objc 游戏引擎)。

感谢任何线索:-) J。

0 投票
3 回答
2607 浏览

objective-c - 查看解释键事件:但将不需要的事件传递到响应者链上?

我真的很希望我的自定义视图可以与-moveLeft:, -deleteForward:,-selectAll:等一起使用,但我也想将我不关心的任何键传递到响应者链上。现在我要优先-keyDown:调用 call [self interpretKeyEvents:[NSArray arrayWithObject:event]];,但这似乎占用了所有关键事件,即使是我的视图没有响应的事件。

有什么方法可以将不需要的事件向上传递,但仍然响应-moveLeft:等?或者我是否需要实施我自己的所有行动,-keyDown:以便我知道我做了什么,没有回应什么?

0 投票
1 回答
311 浏览

cocoa - 在编辑基于单元格的表格视图时拦截撤消

我想在表格视图单元格的文本编辑会话期间拦截或禁用 Cmd-Z/Shift-Cmd-Z。

它是一个基于单元格的表格视图,具有一系列列,其值相互影响,因此填充某些列将自动填充其他列。当用户在编辑会话中间按下 Cmd-Z 时,撤消管理器可以更改当前正在编辑的属性,这会给用户带来混乱的结果。

这是一个例子:

第 1 步:用户在第二列输入“.030”:

在此处输入图像描述

第二步:用户按下tab,模型自动更新第三、四、五列:

在此处输入图像描述

第 3 步:用户按下 Ctrl-Z,模型撤消对第 2、3、4 和 5 列的更改,但编辑会话仍在进行中,因此旧值显示在第 3 列中:

在此处输入图像描述

第 4 步:不输入任何内容,用户按下取消编辑的选项卡,第三列中的值消失:

在此处输入图像描述

这里实际上没有发生任何“错误”,但这令人困惑。

当正在编辑其中一个单元格时,我只想拦截 Cmd-Z 和 Shift-Cmd-Z 并忽略它们。我认为我应该-keyDown:在编辑期间优先考虑急救人员。但那是什么?表格视图根本没有得到那些关键事件,单元格也不是响应者。

0 投票
1 回答
249 浏览

cocoa - NSMenu 中的代表成员

据我了解,委托类是始终从类继承的NSResponder类,并且delegate仅适用于从 NSResponder. NSMenu直接继承自NSObject,那么为什么我会deletgate在 中 看到outlets?还是我误解了您在界面生成器中按住 ctrl 单击某个对象后看到的选项?我明白了Outlets,,, 这些Referencing outletsReceived Actions什么意思呢?如果这很重要,我正在使用 Xcode 4 (10.7.3)。

0 投票
1 回答
802 浏览

objective-c - 如何使 NSControl(例如 NSTokenField)忽略鼠标事件

具体来说,我想NSTokenField忽略鼠标事件,因为我使用它NSTableCellView只是为了以标记化的方式显示数据而不允许任何编辑。

设置令牌字段的enabled = NO工作,除了它使令牌变灰并使其难以阅读文本。

设置标记字段editable = NO非常接近我想要的——它可以防止编辑,同时保留标记字段的外观——除了当我将鼠标悬停在标记上时,它们会亮起。如果我能阻止这种情况,我会做生意的。

我怀疑我需要子类化一些东西并覆盖一些NSResponder方法,但不太确定该怎么做。我尝试了子类化NSTokenField和覆盖mouseEntered:并且mouseMoved:什么都不做,但这也不起作用。

0 投票
1 回答
402 浏览

objective-c - NSControl 子类不应该改变 firstResponder

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

在此处输入图像描述

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

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

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

0 投票
1 回答
586 浏览

objective-c - 用键盘控制 NSSegmentedControl

我的 Cocoa 应用程序中有一个表单,其中包含我希望通过键盘控制的 NSSegmentedControl。然而,NSSegmentedControl 似乎很不愿意成为第一响应者。

将窗口的初始第一响应者设置为分段控件没有任何作用——当窗口第一次加载时,它将没有键盘焦点。如果我像这样手动设置第一响应者,它确实会获得焦点,但是:

[segmentedControl.window makeFirstResponder: segmentedControl];

如果表单的唯一部分是分段控件,那将可以正常工作。如果我添加另一个字段(例如,一个 NSTextField),并将分段控件的 nextResponder 设置为该字段,则分段控件将永远不会成为第一响应者。焦点将立即转到文本字段,按 Tab 键切换回分段控件不起作用。

我试过继承 NSSegmentedControl 并覆盖 AcceptFirstResponder、becomeFirstResponder 等,但无济于事。唯一有区别的是resignFirstResponder——如果我从那个方法返回NO,那么分段控件确实会保持焦点,但显然我不希望它一直保持焦点。

关于如何让控件表现得像普通响应者的任何想法?

0 投票
1 回答
224 浏览

macos - 如何找到第一个响应者辞职的对象(控制器或视图)?

当特定对象退出 FirstResponder 时,我想做一些清理活动。有什么方法可以检测对象是否已退出第一响应者状态。

我需要实施哪些方法才能知道这一点?对此有任何指示吗?

我已经通过了这个链接。但我并没有从中得到太多。

NSTableView 和 NSOutlineView 在 tab 键上编辑