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

Posted

技术标签:

【中文标题】将委托添加到响应者链停止滚动工作【英文标题】:adding delegate to responder chain stops scrolling from working 【发布时间】:2014-08-04 11:01:37 【问题描述】:

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

[myOutlineView setNextResponder:self];

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

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

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

【问题讨论】:

【参考方案1】:

所以答案是,当将委托添加到响应者链中时,您还必须将曾经在其位置的响应者添加到委托中 - 否则链会中断并且事件不会得到处理,所以它去:

    NSResponder *nextResponder = myOutlineView.nextResponder;
    [myOutlineView setNextResponder:self];
    [self setNextResponder:nextResponder];

响应者链恢复后,我的大纲视图现在再次滚动。万岁

【讨论】:

以上是关于将委托添加到响应者链停止滚动工作的主要内容,如果未能解决你的问题,请参考以下文章

响应者链(UItableViewCell 内的 UIWebView)Objective-C

为啥 -[NSTextInputClient doCommandBySelector:] 不应该将事件传递到响应者链上?

iPad没有辞职响应者

响应者链和Hit-Test 机制

响应者链及相关机制总结

iOS 事件响应者链的学习(也有叫 UI连锁链)