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:是不是可以仅在子视图上启用用户交互?

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

UIView hitTest 阻止点击子视图

UIView 调整大小但不是子视图

为啥 UIView 的这些自动布局约束会阻止 UIButton 子视图接收触摸事件?

UIView 子视图不是为 iPad 自动旋转或自动调整大小