2009-08-15 83 views
2

我在主视图中禁用了交互(其中包含一些我用作按钮的子视图)。是否有可能阻止触摸添加到队列中?

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

这样用户不会在网络操作发生时轻敲这些按钮。

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

这是非常奇怪的,为什么触摸事件排队,而视图的用户交互被禁用?

回答

4

很难有信心的答案在这里没有看到代码,但这里是一个想法:

如果您的网络活动是同步的,又称阻塞,那么它可能是用户的触摸排队的情况下,在他们有机会打你的任何代码之前。如果是这样的话,那么在网络活动结束之前,这些触摸将不会被发送到您的响应者链中,他们永远不会有机会“知道”您会禁用与这些控件的交互。

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

如果这个猜测是正确的,我能想到的最不起作用的修复将会使您的网络操作异步。

如果您不想这样做,也可以尝试在同步呼叫完成后使用NSTimer离开网络活动指示灯一秒钟。这样,您的响应者链可以清除传入触摸的队列,并且如果这是期望的行为则忽略它们。

+0

+1优秀的洞察力。当你突然出现时,我正在写一个冗长的回答,我马上就抛弃了它,因为我的比较而言,我的表现看起来有点荒谬。如果可以的话,我会为你投票。 – 2009-08-15 22:41:04

+0

谢谢,戴夫!我希望这对迈克尔有用。 – Tyler 2009-08-16 00:16:21

+0

谢谢,我真的不知道问题出在哪里。基本上这是禁用的背景视图,以及指示网络活动的模式窗口。我先禁用背部。这是XML数据的异步加载。一旦数据加载,我将删除模式窗口,并在后台重新启用交互。 无论如何,我绝对没有得到所有的接触,禁用交互似乎大部分工作。但是如果我在<1秒内重复点击数据完成加载,代码将被执行,并与触摸相关联。 我想另一个问题是, – Michael 2009-08-17 21:53:19

相关问题