Ios 是否可以调暗UIView,但允许触摸其后面的元素?

Ios 是否可以调暗UIView,但允许触摸其后面的元素?,ios,uikit,Ios,Uikit,如何在顶部有一个灰色覆盖层,但允许触摸其下方的按钮?您可以将覆盖层的userInteraction设置为false如上所述,您可以将userInteractionEnabled设置为否 但请注意:当您创建一个全屏透明视图,并将其userInteractionEnabled设置为NO时,该视图的所有子视图都不会响应用户操作。如果在视图上添加按钮,它将不会响应用户点击!还有另一个问题:如果将该视图的alpha值设置为透明,例如0.4,则其所有子视图也将是透明的 解决方案很简单:不要在透明视图上放置任

如何在顶部有一个灰色覆盖层,但允许触摸其下方的按钮?

您可以将覆盖层的
userInteraction
设置为
false

如上所述,您可以将
userInteractionEnabled
设置为

但请注意:当您创建一个全屏透明视图,并将其
userInteractionEnabled
设置为
NO
时,该视图的所有子视图都不会响应用户操作。如果在视图上添加按钮,它将不会响应用户点击!还有另一个问题:如果将该视图的
alpha
值设置为透明,例如
0.4
,则其所有子视图也将是透明的

解决方案很简单:不要在透明视图上放置任何子视图,而是将其他元素添加为视图的同级元素。下面是Objective-C代码来说明我的意思:(注意那些说明一切的注释):


或者简单地说:首先,在父视图中创建所有按钮等。让它们工作起来。然后将覆盖视图添加到父视图。按此顺序进行操作,很明显没有添加任何内容作为覆盖的子项。这只是另一个孩子,恰好在视觉上与其他孩子重叠。
//Create a full screen transparent view:
UIView *vw = [[UIView alloc] initWithFrame:self.view.bounds];
vw.backgroundColor = [UIColor greenColor];
vw.alpha = 0.4;
vw.userInteractionEnabled = NO;

//Create a button to appear on top of the transparent view:
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 80, 44)];
btn.backgroundColor = [UIColor redColor];
[btn setTitle:@"Test" forState:UIControlStateNormal];
[btn setTitle:@"Pressed" forState:UIControlStateHighlighted];
//(*) Bad idea: [vw addSubview:btn];

//(**) Correct way to have the button respond to user interaction:
//    Add it as a sibling of the full screen view
[self.view addSubview:vw];
[self.view addSubview:btn];