6

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

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

谢谢!

4

1 回答 1

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];
    }
}

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

此外,Apple 的UIView 类参考提到某些 UI 组件会覆盖此方法:

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

于 2011-08-06T17:55:37.813 回答