0

在视图控制器中,我正在构建一个图标网格。每个图标打开相同的弹出视图,但填充了不同的信息。

我正在以这种方式创建网格:

 for (int i=0; i<NUM_BADGES; i++) {
    BadgeThumbView *thumb = [[BadgeThumbView alloc] initWithFrame:CGRectMake(posX, posY, 70, 100) 
                                                    andWithLabel:[NSString stringWithFormat:@"BADGE NAME N. %d", i]];
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onBadgeTapped:)];
    [thumb addGestureRecognizer:gestureRecognizer];
    [thumb setTag:i];
    [more code here....]

 }

在 onBadgeTapped 方法中,我正在创建弹出窗口。现在我的问题是一切正常,但我刚刚意识到,当弹出窗口打开时,在与其按钮交互时,我仍然在底层视图控制器中触发手势识别器。

有没有办法在底层视图中禁用所有 GestureRecognizers?我的策略错了吗?并且:有没有办法为我的所有图标使用单个 UIGestureRecognizer,以便以更简单的方式禁用/启用?

非常感谢

4

2 回答 2

1

您可以从视图中删除识别器或设置 userInteractionEnabled 以暂时禁用它。根据您的弹出窗口的实现方式,您可以一次将它们全部禁用。

一种解决方案是将拇指添加为容器 UIView 的子视图,并将该容器添加到您的父视图。然后,您可以通过在容器视图上设置 userInteractionEnabled 来启用/禁用所有功能。

于 2012-12-07T12:33:03.300 回答
0

我认为您应该做一些事情,例如在弹出窗口出现时禁用所有拇指视图的 userInteraction 并在像这样消失时重新启用

[[yourSuperView subviews]makeObjectsPerformSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:FALSE]];

否则将所有thumbViews添加到一个子视图(比如'b')然后将视图'b'添加到superview(比如'a')作为子视图b并在弹出窗口出现时关闭用户交互以查看并在弹出窗口消失时打开

于 2012-12-07T12:33:11.600 回答