0

我正在尝试实现一个 UIResponder 对象,该对象将允许我记录屏幕活动,然后将事件传递给下一个响应者以允许应用程序正常进行。我已经对此进行了一段时间的研究,并看到了两种可行的方法:创建根视图并忽略放置在其顶部的子视图中的触摸,允许根视图处理它们;或者创建一个添加到所有子视图的 GestureRecognizer。我的应用程序有多个视图在主窗口上交换进出。

我已经尝试了这两种方法并最终陷入了同样的僵局:我在我的视图(或识别器)中获得了 touchesBegan/touchesMoved/touchesEnded 事件,但是当我将它们发送到响应者链时没有任何反应。我已经尝试了以下所有方法。请注意,“view”是从 touch.view 派生的,view.superview 是我的“loginView”对象,其中包含被点击以将我带到此处的按钮:

 [view hitTest:frame.origin withEvent:event];
 [view touchesBegan:touches withEvent:event];
 [view.superview hitTest:frame.origin withEvent:event];
 [view.superview touchesBegan:touches withEvent:event];
 [[view nextResponder] touchesBegan:touches withEvent:event];
 [[view nextResponder] hitTest:frame.origin withEvent:event];
 [[[view superview] nextResponder] touchesBegan:touches withEvent:event];
 [[view superview] hitTest:frame.origin withEvent:event];

这些都不起作用,实际上 '[[view nextResponder] hitTest...' 会产生警告。

我已经尝试了 resignFirstResponder,甚至打算尝试 sendAction,但此时我只是抓住了稻草。我尝试将我的观点放在链的底部和顶部并获得相同的结果。显然我错过了一些东西,但我看不到什么。

谁能告诉我下一步该尝试什么?

——山姆

4

1 回答 1

0

我不太确定你到底想做什么,但也许http://iphonedevelopment.blogspot.com/2008/10/bit-about-responder-chain.html可以帮助你。

就个人而言,我在 UIView 子类中传递触摸是这样的:

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
    [[self nextResponder] touchesMoved:touches withEvent:event];
}

- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    [[self nextResponder] touchesEnded:touches withEvent:event];
}
于 2011-05-31T22:56:10.730 回答