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

时间:2011-09-01 14:22:10

标签: objective-c ios cocoa-touch user-interface uiview

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

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

我可以在叠加视图中执行此操作的最佳方法是什么?

4 个答案:

答案 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,或者用户仍然可以通过键盘与其进行交互。