beginIgnoringInteractionEvents或userInteractionEnabled = NO无法按预期工作

时间:2012-01-03 03:36:05

标签: ios

我在使用进度指示器显示叠加视图时遇到了一个非常奇怪的用户交互问题。

在我以前的主视图中&下一个按钮,然后单击下一个按钮,我进行了一个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服务调用结束后被调用。

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

2 个答案:

答案 0 :(得分:1)

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

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

请参阅此问题blocking user interaction with underlying views

答案 1 :(得分:0)

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