是否可以阻止添加到队列中的触摸?

时间:2009-08-15 22:07:28

标签: iphone objective-c events queue touch

我在主视图中禁用了互动(其中包含一些我用作按钮的子视图)。

我保持此禁用状态,而我有一个辅助视图,指示网络活动(加载数据)。完成后,我在主视图中重新启用交互。

这样,用户在进行网络操作时不会点击这些按钮。

无论如何,一切似乎都很好,但是如果用户开始在主视图中点击按钮,一旦重新启用发生这些触摸事件(从过去几秒)实际触发。不是触摸开始,它突出了按钮,但触摸结束时调用的功能。就像它在整个被禁用的时候一样排队,并且“比赛要赶上来”。

这是非常离奇的,为什么在视图禁用用户交互时触摸事件会排队?

1 个答案:

答案 0 :(得分:4)

如果没有看到代码,很难对这里的答案充满信心,但这里有一个想法:

如果您的网络活动是同步的,也就是阻止,则可能是用户的触摸在他们有机会击中您的任何代码之前排队。如果是这种情况,那么在网络活动结束之前,这些触摸将不会被发送到您的响应链中,并且他们永远不会“知道”您已禁用与这些控件的交互。

这是您可以帮助调试情况的一种方法:在顶层(您称之为辅助视图)中添加一些指示网络活动的调试NSLog语句。确保辅助视图的框架足够大以包含这些触摸,并查看它是否会在发生时立即记录触摸。如果没有,我的猜测可能是正确的。如果是,那么,您仍然可以获得有用的信息 - 您可以简单地捕获此级别的触摸,而不是让它们排队。

如果这个猜测是正确的,我能想到的最简单的修复就是让你的网络操作异步。

如果您不想这样做,您还可以尝试使用NSTimer在同步调用完成后暂停网络活动指示器一瞬间。这样,您的响应者链可以清除传入触摸的队列,如果这是期望的行为,则忽略它们。