阻止用户与底层视图的交互
在我的应用程序中,我有一个覆盖视图,当一些处理和networking正在发生时显示。 它只是一个半透明的视图(UIView的子类),上面有一个加载指示器,填满整个屏幕。
我想阻止任何底层视图接收用户交互(例如,不应该滚动基础表视图,不按下button)。
在叠加视图中,我能做到这一点的最佳方式是什么?
只需将覆盖视图的userInteractionEnabled
属性设置为YES
。 这将导致所有触摸事件发生在覆盖视图上,而不是传递给底层视图。
只需将您的半透明覆盖视图的属性userInteractionEnabled
设置为YES即可。
我认为最好的方法是使用这两种方法:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; [[UIApplication sharedApplication] endIgnoringInteractionEvents];
在进行繁重的处理操作之前,分别完成之后。
只要确保覆盖视图及其所有父视图没有将userInteractionEnabled
设置为NO,不隐藏,并且没有小于0.01的alpha
。 然后用户的触摸将与覆盖层交互,而不是在其后面可见的视图。 另外请注意,它不会阻止未被其超级视图覆盖的区域中的交互:即使您的视图覆盖了整个屏幕,但如果它的父级仅为10×10,那么它将仅在其父级覆盖的10×10区域内阻止交互。
您可能还需要确保在任何现有的第一响应者上调用resignFirstResponder
,否则用户仍然可以通过键盘与其交互。