Superview忽略UserInteractionEnabled = NO?

时间:2011-08-06 17:48:28

标签: ios events touch superview

我有一个子视图进入屏幕动画,当它在屏幕上时,我想要超级视图(在我的情况下,在后台的视图),忽略触摸事件。 我尝试了一切,但它不起作用。

有没有办法'强制'超级视图停止接收触摸事件?

谢谢!

1 个答案:

答案 0 :(得分:4)

当你说超级视图时,我认为你的意思是动画视图的超级视图。 Apple的文档非常不明确userInteractionEnabled,但我认为如果将其设置为false,则会禁用特定视图上的触摸事件,但不会禁用其子视图。我建议你递归地做。以下是可用于在视图上禁用/启用所有触摸事件的代码示例:

- (void)setInteraction:(BOOL)allow onView:(UIView *)aView {
    [aView setUserInteractionEnabled:allow];
    for (UIView * v in [aView subviews]) {
        [self setInteraction:allow onView:v];
    }
}

然后,您可以在超级视图[self setInteraction:NO onView:[self superview]]上调用此方法。当然,这也会禁用您的触摸事件,因为您在超级视图上以递归方式禁用它们。当然,您可以随时重新启用触摸事件[self setUserInteractionEnabled:NO]

此外,Apple的UIView Class Reference提到某些UI组件会覆盖此方法:

  

注意:某些UIKit子类会覆盖此属性并返回不同的默认值。请参阅您使用的任何类的文档,以确定它是否为此属性返回不同的值。