仅在上部视图中启用触摸

时间:2014-05-29 13:17:20

标签: ios objective-c uiview

我有一个视图控制器,我在其中添加了一些菜单子视图。 比我在这个菜单上有按钮,因此我必须禁用主视图上的触摸,并在子视图菜单上启用它们。

我在子视图类(UIView子类)中尝试过这种方法:

self.superview.userInteractionEnabled=NO;
self.userInteractionEnabled=YES;
sideMenuBackView.userInteractionEnabled=YES;

按钮添加到sideMenuBackView的位置,并且在点击时不会触发。

如何启用子视图类中的按钮。

编辑:

我看到了这个:

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) return nil;
    else return hitView;
}

我并没有真正帮助,因为如果我将它放在父视图中,它将永久禁用触摸,而不是暂时的。我需要的是临时启用触摸子视图中的按钮,并禁用其父视图中的触摸。比菜单关闭时,再次启用父

3 个答案:

答案 0 :(得分:0)

制作像View * myview这样的对象;

如果你想隐藏

self.myview.hidden = YES;

答案 1 :(得分:0)

捕获超级视图中的所有触摸事件,然后使用UITouch -locationInView确定触摸所在的子视图。忽略您想要激活的子视图中的任何触摸。将所需子视图中的触摸传递到子视图以处理它们。

e.g:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    if ([self.subView1 pointInside:[touch locationInView:self.subView1] withEvent:nil])
    {
        // User touched inside the subview - pass the event on to that subview to handle it           
        [self.subView1 touchesBegan:touches withEvent:event];
    }
    else
    {
        // User touched a different subview or in the main (superview) - ignore the touch
    }
}

-touchesMoved-touchesEnded中执行相同操作。

答案 2 :(得分:0)

对我的观点进行子类化并实现此目的:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    return CGRectContainsPoint(self.button.frame, point);
}

将允许按钮触摸,但阻止所有其他触摸。