iOS:UIView 阻止用户交互,但不是子视图
Posted
技术标签:
【中文标题】iOS:UIView 阻止用户交互,但不是子视图【英文标题】:iOS: UIView blocks the userinteraction but not it's subview 【发布时间】:2016-06-27 10:19:40 【问题描述】:我正在尝试自定义 UIPickerView
我有一个 UIView 的子类,它是 mainView。
还有一个用于模糊或变暗背景的蒙版视图,我将它添加到主视图中。
然后是选择器视图,我已将它作为子视图添加到掩码视图中。
层次结构很简单
--主视图
| -- 掩码视图
|| -- 选择器视图
最后我将整个视图添加到应用程序键窗口。
我的问题是,每次显示此主视图时,我都希望掩码视图阻止用户交互,因此用户无法在选择器视图之外单击。
但是如果我将遮罩视图的 userinteractive 设置为 no,它也会阻止选取器视图的滚动和触摸。
那么我怎样才能实现超级视图是非交互的,而它的子视图是交互的呢?
谢谢。
【问题讨论】:
【参考方案1】:默认情况下,如果你的 mask view 是纯 UIView,当你和它进行交互时,什么都没有发生。否则,让我们在自定义遮罩视图之上添加另一个纯 UIView。
--主视图
| -- customView 用户可以交互(如果是自定义的,你的旧掩码视图)
|| -- 掩码视图
||| -- 选择器视图
【讨论】:
【参考方案2】:1.将 superview 设置为非交互式:
Yoursuperview.userInteractionEnabled=NO;
2.将子视图设置为交互式:
然后,遍历您的 superview 的子视图并将用户交互设置为 YES,如下所示:
for (UIView* view in YourSuperView.subviews)
if ([view isKindOfClass:[/*"which ever class of your subviews "*/ class]])
[view setUserInteractionEnabled:YES];
或
将setUserInteractionEnabled
设置为您的父视图的所有子视图
for (UIView* view in YourSuperView.subviews)
[view setUserInteractionEnabled:YES];
或
Yoursuperview.userInteractionEnabled=NO;
[[yourSuperView subviews]makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:FALSE]];
点击此处了解更多信息:https://***.com/a/11546963/5575752
【讨论】:
【参考方案3】:按如下方式设置层次结构:
--主视图
| -- 掩码视图
| -- 选择器视图
现在您可以在 maskview 上将 userInteractionEnabled 设置为 NO,而不会阻塞 pickerview。选择器视图必须位于文档大纲中的 maskview 下方,才能位于 maskview 的前面。
【讨论】:
以上是关于iOS:UIView 阻止用户交互,但不是子视图的主要内容,如果未能解决你的问题,请参考以下文章
iPhone UIView:是不是可以仅在子视图上启用用户交互?