gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:50:05 27 4
gpt4 key购买 nike

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

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

这样用户在网络操作发生时就不会点击这些按钮。

无论如何,一切看起来都很好,但是如果用户开始点击主视图中的按钮,一旦重新启用,这些触摸事件(从过去几秒钟开始)实际上会触发。不是触摸开始,它突出显示按钮,而是触摸结束时调用的函数。就好像它在被禁用的整个过程中都在排队并且“竞相追赶”。

这很奇怪,为什么在 View 禁用用户交互的情况下触摸事件会排队?

最佳答案

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

如果您的网络事件是同步的,也称为阻塞,那么可能会出现这样的情况:用户的触摸在有机会点击您的任何代码之前就已排队。如果是这种情况,那么在网络事件完成之前这些触摸不会被发送到您的响应者链,并且他们永远没有机会“知道”您已禁用与这些控件的交互。

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

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

如果您不想这样做,您还可以尝试使用 NSTimer 在同步调用完成后让网络事件指示器保持一瞬间亮起。这样,您的响应者链可以清除传入触摸的队列,并忽略它们(如果这是所需的行为)。

关于iphone - 是否可以阻止触摸添加到队列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com