【问题标题】:beginIgnoringInteractionEvents or userInteractionEnabled = NO not working as expectedbeginIgnoringInteractionEvents 或 userInteractionEnabled = NO 未按预期工作
【发布时间】:2016-07-26 13:34:02
【问题描述】:

在显示带有进度指示器的覆盖视图时,我遇到了一个非常奇怪的用户交互问题。

在主视图上,我有上一个和下一个按钮,然后单击下一个按钮,我进行了 Web 服务调用,在此过程中,我显示了一个带有进度指示器的覆盖视图,如下所示。

    [self createProgressViewWithMessage:@"Loading..."];
    [self.view bringSubviewToFront:self.inProgressView];
    [self.inProgressView becomeFirstResponder];
    [NSThread detachNewThreadSelector:@selector(search:) toTarget:self
                           withObject:info];

成功检索后,我将更新记录列表并执行启用和禁用上一个和下一个按钮。在显示覆盖视图时,单击上一个或下一个按钮,事件正在排队并在 Web 服务调用完成后被调用。为了避免这些排队的事情,我尝试了多种方式,比如调用[[UIApplication sharedApplication] beginIgnoringInteractionEvents] 在创建进度视图并在 Web 服务调用完成后调用 [[UIApplication sharedApplication] endIgnoringInteractionEvents] 之前,但之后仍然会调用事件。

尝试通过设置userInteractionEnabled = NO 来制作主视图,同时覆盖视图存在但仍然没有用。

尝试了所有可能的方法,但仍然没有用。不知道为什么事件会在 Web 服务调用完成后排队并被调用。

有人可以帮我解决这个问题吗?我不希望在显示覆盖视图时将事件排队。我的意思是,当覆盖视图正在进行时,不应将事件传递给主视图上的上一个和下一个按钮。

【问题讨论】:

    标签: ios


    【解决方案1】:

    这有点违反直觉,但您实际上希望您的叠加层能够启用交互。在这种情况下,它会接收到触摸事件,它们不会被传递给下面的按钮和其他视图:

        // Stop interacting with buttons underneath while async operation in progress.
        myOverlayView.userInteractionEnabled = YES;
    

    看到这个问题blocking user interaction with underlying views

    【讨论】:

      【解决方案2】:

      您可以设置userInteractionEnabled = NO,但不能设置您的主视图 但是您的叠加视图(并且您的叠加视图必须覆盖您的按钮) 或者你可以禁用你的按钮

      【讨论】:

      • 我尝试设置覆盖视图 userInteractionEnabled = NO 甚至禁用按钮。在我的 Web 服务调用完成后,这些事件将被触发。当 Web 服务正在进行时,它们不会被解雇。一旦 Web 服务调用完成,所有事件都会排队并被触发。
      • 那么问题可能不是按钮被触发,我需要查看更多代码,了解您的按钮是做什么的,您如何发出网络服务请求,网络服务调用完成后您会做什么跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2021-06-04
      • 2022-01-24
      • 2015-05-11
      • 2020-05-15
      • 2014-10-31
      相关资源
      最近更新 更多