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