阻止用户与底层视图的交互

在我的应用程序中,我有一个覆盖视图,当一些处理和networking正在发生时显示。 它只是一个半透明的视图(UIView的子类),上面有一个加载指示器,填满整个屏幕。

我想阻止任何底层视图接收用户交互(例如,不应该滚动基础表视图,不按下button)。

在叠加视图中,我能做到这一点的最佳方式是什么?

只需将覆盖视图的userInteractionEnabled属性设置为YES 。 这将导致所有触摸事件发生在覆盖视图上,而不是传递给底层视图。

只需将您的半透明覆盖视图的属性userInteractionEnabled设置为YES即可。

我认为最好的方法是使用这两种方法:

 [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

在进行繁重的处理操作之前,分别完成之后。

只要确保覆盖视图及其所有父视图没有将userInteractionEnabled设置为NO,不隐藏,并且没有小于0.01的alpha 。 然后用户的触摸将与覆盖层交互,而不是在其后面可见的视图。 另外请注意,它不会阻止未被其超级视图覆盖的区域中的交互:即使您的视图覆盖了整个屏幕,但如果它的父级仅为10×10,那么它将仅在其父级覆盖的10×10区域内阻止交互。

您可能还需要确保在任何现有的第一响应者上调用resignFirstResponder ,否则用户仍然可以通过键盘与其交互。