问题标签 [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 投票
2 回答
1054 浏览

cocoa - mouseDragged:是不是传下来了两个子视图?

我正在编写一个程序,该程序具有许多子类 NSView(Frame),它们具有不同的内容,可以通过鼠标在其父视图中拖动。所有视图都包含一个名为 contentView 的子视图,该子视图又可以包含更复杂的层次结构。

如果我有一个不可编辑的 NSTextField 作为 contentView,则 mouseDown: 和 mouseDragged: 事件将毫无问题地传递到其超级视图,并且拖动工作正常。

如果 contentView 是 NSView 的子类,而该子类又包含许多 NSTextField,则 mouseDragged: 事件不会从 NSTextField 传递到父视图。

mouseDown: 事件被框架接收。单击 NSTextFields 之间的间隙并直接拖动 contentView 效果很好。

NSTextFields 在 contentView 中是这样设置的:

我尝试将 mouseDragged: 方法添加到子类 NSTextField 和子类 NSView 中,并且不使用该方法。两者都没有改变。处于同一子视图级别的其他 NSControl 也存在此问题。

或者

目前,这种行为对我来说似乎完全不直观。有什么我想念的吗?(我在 Mountain Lion 上使用 Xcode 4.6.2。)

0 投票
1 回答
71 浏览

ios - iOS:nextResponder 可以是另一个应用程序吗?

这个问题与我之前的问题相关(受启发): iOS:处理远程控制事件,然后将事件中继到音乐应用程序

我的应用程序可以成为远程控制事件的第一响应者。但是,我希望我的应用程序将远程控制事件中继到其他应用程序。所以我的问题是是否可以将 nextResponder 设置为另一个应用程序中的对象?来自Apple doc: http: //developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html ,在我看来,响应者链是应用程序绑定的,没有提及在应用程序之间中继事件。

这甚至可能吗?

0 投票
2 回答
869 浏览

ios - UIControl 目标操作事件未沿响应者链向上流动

我有一个UIButton内部 a UITableViewCell,它保存在我的UITableViewController子类拥有的表中。我正在尝试利用目标/动作对的功能,它可以将事件冒泡到下一个响应者,直到找到可以处理事件的响应者,但我没有让它工作。一些代码:

在我的表格单元格中,我像这样设置我的按钮:

该按钮被添加到我的单元格中,并且该单元格在表格视图中显示得很好。由于我已经传递nil了目标,所以这个事件应该冒泡,直到它到达我的View Controller,它实现-doThing了,但它没有被调用。

我已经在单元子类和我的视图控制器子类中覆盖- (BOOL)canBecomeFirstResponder并返回YES,但即使结合起来,它仍然不起作用。

我已经调试看到按钮和视图控制器都在同一个响应者链中,但不知何故,事件似乎并没有弥补。

有任何想法吗?

0 投票
1 回答
62 浏览

objective-c - 从子类中移除一个动作

我的 NSDocument 子类实现了 selectAll:。唯一的问题是,我使用的是 NSTableView,它还实现了 selectAll:。但是, NSTableView 中的 selectAll: 操作并没有做我想要的,它确实阻止了我的 Document 类中的 selectAll: 方法在响应者链中被访问。

我已经有一个 NSTableView 的子类,经过一番探索后,我通过向我的 NSTableView 子类添加了一个 respondsToSelector: 方法,告诉它没有 selectAll: 操作,从而使事情按我想要的方式工作:

这似乎工作正常,允许我的文档子类中的 selectAll: 方法来做它的事情。但是这个解决方案让我有点不安。我在这个子类中实现的其他操作方法呢?我是否需要手动检查并为它们中的每一个返回 true?我确实在这个子类中定义了两个动作,moveLeft: 和 moveRight:,它们似乎工作,即使我没有在 respondsToSelector: 中处理它们。所以我的问题是,我这样做是否正确,还是我缺少什么?或者也许有一些完全不同的方法可以正确地做到这一点?

顺便说一句,我从 OmniGroup 论坛上的这篇文章中得到了覆盖 respondsToSelector 的想法:

http://mac-os-x.10953.n7.nabble.com/Removing-an-action-from-a-subclass-td27045.html

0 投票
5 回答
1768 浏览

ios - UITableViewCell 在响应者链中跳过

我试图在 a 的子视图中触发事件UITableViewCell,并让它在响应者链中冒泡并由自定义UITableViewCell子类处理。

基本上:

SomeView.m(这是 的子视图UITableViewCell

SomeCustomCell.m

为了测试为什么这不起作用,我someAction:在 ViewController 上添加了方法,而 ViewController 是最终处理从表格视图单元子视图冒泡的事件的方法,即使 Cell 应该处理它。someAction:我已经检查了 Cell 是否在响应者链上,并且我已经验证了响应者链上的任何视图,无论是在单元上方还是下方,如果它们实现了该方法,它们都会响应事件。

这到底是怎么回事?

这是一个显示它的项目https://github.com/keithnorm/ResponderChainTest这是某种预期的行为吗?我没有找到任何说明 UITableViewCell 的处理方式与其他 UIResponder 不同的文档。

0 投票
0 回答
100 浏览

nsdocument - NSDocument 不在响应者链中

根据文档(参见图 1.10),NSDocument应该在响应者链中。

但是,如果我尝试通过该方法记录响应者链

这是我得到的:

2014-04-16 13:04:16.228 MyApp [5430:303] < NSWindow: 0x6080001e3200>

2014-04-16 13:04:16.228 MyApp [5430:303] < NSWindowController: 0x608000085dc0>

为什么会这样?我错过了什么吗?

我遇到这个问题的应用程序是一个最小的基于文档的应用程序:除了日志记录方法之外什么都没有。

0 投票
1 回答
50 浏览

delegates - 将委托添加到响应者链停止滚动工作

出于多种原因,我将实现 NSOutlineViewDelegate 协议的类添加到响应者链中:

这会阻止我的大纲视图滚动。拨打电话 - 滚动工作正常,将其放回 - 滚动停止。如果我使用向上和向下箭头在视图中移动选择,它会滚动以显示选定的行,但手势滚动不会做任何事情。

委托包含很多支持拖放的方法,以及支持上下文菜单的 ibaction 方法,但我想不出里面有什么会干扰滚动(我使用的是带有手势滚动的 macbook air)。有人知道是什么导致了干扰吗?或任何想法如何诊断?

我应该补充一点,我将委托类设为 NSResponder 的子类。

0 投票
1 回答
1592 浏览

cocoa - Cocoa:将操作(复制:,粘贴:等)转发到响应者链

我有一个NSOutlineView实现copy:,paste:等的子类cut:。此外,NSDocument子类实现了这些相同的方法。

当大纲视图在响应者链中时(是第一响应者或它的父视图),所有的复制/粘贴事件都NSOutlineView被子类拦截。我想要的是根据上下文捕获其中一些消息,或者让它们传播并NSDocument被子类捕获。

我想要的基本上是:

我已经尝试了很多技巧,没有一个成功:

  • [[self nextResponder] copy:sender]这不起作用,因为下一个响应者可能无法实现copy:
  • [super copy:sender]同样在这里,超级没有实现copy:
  • [NSApp sendAction:anAction to:nil from:sender]很高兴向第一响应者发送操作。如果在动作中使用

当然,我可以在响应者链上手动循环,直到找到响应copy:甚至直接调用copy:当前文档的内容,但我正在寻找正确的方法。

提前谢谢了!

0 投票
2 回答
618 浏览

ios - 确定响应者链是否会处理一个动作

0 投票
0 回答
176 浏览

ios - 从 UIPopoverController 中解开 Segue

我已经通过发送它UIViewController从 a 加载了它(它不是我的应用程序的主要故事板)。UIStoryboardinitialViewController

我在那个故事板中使用了一个放松的转场。它的退出点是在主要UIViewController场景中的一个放松动作中。 UIStoryboard

我用代码而不是 segue 显示这个视图控制器。

如果我用 显示加载的视图控制器presentViewController:animated:completion:,则展开 segue 可以正常工作并找到合适的处理程序。

但是,如果我将呈现的视图控制器包装在 a中,然后呈现弹出框,则展开 segue 不起作用。UIPopoverController我可以断点展开动作并且它不会被调用。

在他们关于 unwind segues 如何工作的技术说明中,Apple 介绍了查找目标视图控制器的过程。

Unwind Segue 如何确定其目标视图控制器 当启动 unwind segue 时,它​​必须首先在导航层次结构中找到最近的视图控制器,该控制器实现在创建 unwind segue 时指定的展开操作。这个视图控制器成为展开转场的目的地。如果没有找到合适的视图控制器,则 unwind segue 被中止。

从启动 unwind segue 的视图控制器开始,搜索顺序如下:

  1. 响应者链中的下一个视图控制器被发送viewControllerForUnwindSegueAction:fromViewController:withSender:消息。对于模态呈现的视图控制器,这将是调用presentViewController:animated:completion:. 否则,parentViewController. 默认实现在接收者的childViewControllers数组中搜索想要处理展开动作的视图控制器。如果接收者的子视图控制器都不想处理展开动作,则接收者检查它是否想要处理展开动作,如果是,则返回 self。在这两种情况下,该canPerformUnwindSegueAction:fromViewController:withSender:方法都用于确定给定的视图控制器是否想要处理展开操作。

  2. viewControllerForUnwindSegueAction:fromViewController:withSender:如果在第一步中没有返回视图控制器,则从响应者链中的下一个视图控制器开始重复搜索

(注意我对第二点的强调。)

所以,据我所知,我正在做的事情应该以某种方式工作。unwind segue 将在响应者链中冒泡,从呈现的视图控制器中UIPopoverController出来,进入到出现的任何内容中,并在链上向上 - 最终找到我的 unwind 处理程序。

但它不起作用。有什么想法为什么不呢?