问题标签 [responder-chain]

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 投票
0 回答
109 浏览

ios - SKNode 在响应者链中的位置在哪里?

SKNode 从 NSResponder 继承,但我无法理解节点如何包含在响应者链中以及它们的插入位置。

例如,SKNode 如何接收mouseDown:消息?

单击视图时,会发生命中测试过程以确定命中位置的最深视图,然后mouseDown:从该点向上发送响应链。

SKNode 不是视图,因此它们无法直接发送此消息(因为它由 SKView 处理)。那么它们是如何包含在响应者链中的呢?

0 投票
1 回答
93 浏览

ios - 使用第一响应者而不是将方法链接到控制器层次结构中是好的应用程序设计吗?

这个问题适用于 OSX 应用程序,但同样的原则也适用于 iOS。

我在情节提要上有一个 NSWindowController 具有以下设置。

A. MainWindowController 有子视图:

1) 带有按钮的工具栏

2) 一个SubVcA拥有自己内容的viewController

B. SubVcASubVcBviewController 的视图作为它的内容

C. SubVcB有功能ButtonPressed

在此处输入图像描述

目标是SubVcB通过单击工具栏按钮来触发 viewController 中的按钮按下功能。

我一直在这样做的方法是从 mainWindowController 到目标 viewController 的方法实现链,如下所示:

这很有效,但是当控制器堆栈达到大约 4 级时它会变得混乱。当 SubVC(B) 必须将数据发送回 MainWindowController 时,它也会变得更加混乱,因为为了进行封装(如不让 SubVC(B) 拥有太多关于其调用 viewControllers 的信息),我必须在链上实现委托方法。当您有多个工具栏按钮时,它会变得更加混乱。

现在......我刚刚开始搞乱情节提要上的 firstResponder 项目

在此处输入图像描述

而且我意识到它会弹出一个巨大的列表,其中包含在整个应用程序中实现的所有方法-(IBAction)

所以我现在的问题是:为了减少视图层次结构上下的方法混乱,使用 firstResponder 将 MainWindowController 的工具栏按钮操作直接连接到 SubVc(B) viewController 中的 buttonPressed 方法是否是一个好的应用程序设计故事板上的对象?

此外,还有其他设计模式可以减少混乱吗?

0 投票
1 回答
3520 浏览

ios - 当子滚动视图到达结束时滚动父滚动视图

我有一个包含在父滚动视图中的子滚动视图(不是直接子视图)。我想要的是,一旦子滚动视图到达其内容的末尾,父滚动视图就开始沿相同方向滚动。

这种开箱即用的工作,但不是真的。现在我必须抬起手指才能在孩子到达结尾后让父滚动视图开始滚动。

对此有什么想法吗?

编辑:

通过在表格视图单元格中向右滑动以显示聊天控制器,可以在 Snapchat 中看到我正在寻找的示例。

0 投票
1 回答
36 浏览

macos - 如何在响应者链中保持隐藏视图?

我有一个NSSplitViewController并且在其中一个项目中我有多个带有键盘快捷键的按钮。

一旦用户隐藏该项目,快捷方式就不会触发。有没有办法将隐藏视图中的按钮保留为响应者链的一部分?

0 投票
1 回答
289 浏览

cocoa - 无法在自定义 NSViewController 中注册鼠标事件

这是我的代码,为简洁起见进行了简化:

MainMenu.xib有一个单独的窗口,您可以在上面的 AppDelegate 中看到它。

当我按下键盘上的按钮时,我会在控制台中看到“栏”。当我单击鼠标时,我什么也看不到。单击鼠标后,将不再注册任何键事件。

我错过了什么?为什么鼠标事件会偷走响应者链,它要去哪里?

0 投票
1 回答
331 浏览

swift - 在 Swift 中实现响应者动作

我很难在 Swift 中实现 NSMenuItem 的操作。通常,您在 Objective-C 中实现这样的操作:

在像这样在第一响应者中设置操作之后,这非常有效:

用户定义的第一响应者

但是,在 Swift 中重写了我的视图控制器之后,似乎没有调用以下新方法:

它似乎不起作用,即使 Obj-C 和 Swift 版本都用于同一个视图控制器子类。

0 投票
1 回答
273 浏览

swift - 在可可应用程序中更改标签顺序(焦点)

我有一个带有 4 个文本字段 tf1 - tf4 的简单视图。

我想将初始焦点设置在 tf2 上,效果很好。

然后我想要 tf1 获得焦点,然后再次获得 tf2 - 这不起作用,焦点在所有 4 个文本字段中循环。

我试过这样:

我的错误在哪里?

0 投票
1 回答
1101 浏览

cocoa - 在 Cocoa 中处理 NSSegmentedControl 选定的段更改

原谅超级菜鸟的问题,但过去一个小时我一直在谷歌上搜索这个问题,我很沮丧,因为我似乎无法找到这样一个非常基本的问题的答案:

如何处理 Cocoa 中的控制更改?

我来自 iOS,很明显 Cocoa 不像 UIKit 那样使用插座或委托来处理事件,我觉得我只是在这里遗漏了一些非常重要的信息。我发现它使用了第一响应者链,但除此之外,我无法弄清楚如何实际执行它,或者如何找到这些事件的定义或记录位置。

所以我有一个NSSegmentedControl内部 a NSToolBar,我只想知道用户何时更改所选段。我仔细阅读了类文档,但没有看到任何要处理的事件或动作的提及。我确实注意到,如果我将控件的action出口拖到我的第一响应者代理上,我会列出数万亿个不同的操作,但这些操作似乎都不相关。

我到底如何在 Cocoa 中做到这一点?

0 投票
2 回答
1040 浏览

swift - addTarget:action:forControlEvents: target 为 nil 时的选择器语法?

我希望父母ViewController处理由其中一个孩子生成的 Target-Actions ViewControllers

根据 Apple 文档,这应该可以通过设置并遵循响应者链target来实现。nil

如果您为目标对象指定 nil,则控件会在响应程序链中搜索定义指定操作方法的对象。https://developer.apple.com/documentation/uikit/uicontrol

但是如何在targetis时编写动作方法签名nil

通常,您将函数名称附在#selector()其中,让您在编译时检查是否存在具有该签名的方法。像这样:

但是因为编译targetnil因为找不到它而抱怨:

我尝试使用字符串初始化选择器,但编译器也抱怨。

0 投票
1 回答
382 浏览

macos - 为什么 -[NSTextInputClient doCommandBySelector:] 不应该将事件传递给响应者链?

文本视图不应该将不可调用的命令转发到响应者链上,文档-[NSTextInputClient doCommandBySelector:]

如果aSelector无法调用,则doCommandBySelector:不应将此消息向上传递到响应者链。NSResponder也实现了这个方法,它确实将不可调用的命令向上转发到响应者链,但文本视图不应该。NSTextInputClient实现协议的文本视图继承自NSView,which 继承自NSResponder,因此您对此方法的实现将覆盖NSResponder. 它不应该调用超级。

最后一句话没有澄清,只是重新表述了如果我的文本理解没有让我失望的话,事情是如何设置的。

所以基本上只有一个处方:“文本视图不应该”。时期。

但为什么?

例如,我可以理解一种情况,您希望文本视图不对任何/所有NSResponder方法做出反应,而是将这些方法委托给它的视图控制器。这会引起麻烦吗?这只是在 macOS 应用程序中保持文本视图行为一致的建议吗?