带有 alpha 设置的 UIView 的点击事件转到底层按钮
Posted
技术标签:
【中文标题】带有 alpha 设置的 UIView 的点击事件转到底层按钮【英文标题】:Tap event for a UIView with alpha set going to underlying button 【发布时间】:2018-04-21 04:30:56 【问题描述】:当从服务器加载数据时,我们使用 UIView 屏蔽我们的 UI,如下示例代码:
let loadingView = UIView()
loadingView.tag = 9999
loadingView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
loadingView.backgroundColor = UIColor.white.withAlphaComponent(0.4);
controller.view.addSubview(loadingView)
正如你所见,这个 loadingView 占用了控制器的整个宽度和高度,实际上遮住了屏幕。拥有 alpha 意味着底层内容是半透明可见的。加载数据后,我们从控制器中删除此视图:
for view in controller.view.subviews
if view.tag == 9999
view.removeFromSuperview()
然而,我们看到了一个奇怪的问题——如果用户在显示 loadingView 时继续点击控制器上的 UIButton,那么在从控制器中移除 loadingView 后,点击按钮会被多次调用。换句话说,在显示 loadingView 时,我们的 UIButton 点击操作会被调用多少次。
我们做错了吗?我们如何防止在显示 loadingView 时调用 UIButton 上的点击?
【问题讨论】:
开启loadingView
的用户交互。
【参考方案1】:
您应该在加载视图上进行用户交互。
loadingViee.userInteractionEnabled = false
正如你所说,加载视图在整个屏幕上。
【讨论】:
【参考方案2】:您可以在加载视图期间忽略屏幕触摸完成加载视图后,您可以继续进行交互,如下所示。
UIApplication.shared.beginIgnoringInteractionEvents()
UIApplication.shared.endIgnoringInteractionEvents()
【讨论】:
以上是关于带有 alpha 设置的 UIView 的点击事件转到底层按钮的主要内容,如果未能解决你的问题,请参考以下文章
将带有 alpha 1 的 UIView 放在带有 alpha 0.5 的 UIView 之上
Xcode iOS UIView 带有点击手势,允许在子视图上输入
带有点击事件的 UITapGestureRecognizer