Superview没有获得触摸事件

时间:2014-04-21 14:25:24

标签: ios uiview

我有一个简单的iPad应用程序,其中包含以下层次的视图:

  • BaseView(涵盖整个可用区域)。
  • SquareView(涵盖100x100px区域)。

SquareView作为子视图添加到BaseView

我还有一个BaseViewController.m文件。在此文件中,我添加了touchesBegantouchesEnded函数来处理触摸事件。问题是,当我点击SquareView触摸函数被调用时,但当我点击其他任何地方时,他们都不会被调用。

userInteractionEnabled = YES SquareView。我需要设置此变量才能接收触摸。

单击SquareView外的区域不会触发触摸功能。我很困惑为什么。在userInteractionEnabled中设置BaseView变量没有任何影响。这可能发生什么?我缺少一些规则吗?我很确定我有一点工作。

当用户点击子视图(SquareView)时,我需要启动一个菜单(让我们说MenuView类)。我们的想法是,当用户点击菜单外的区域(或SquareView)时,我需要通过调用MenuView来移除弹出式[menuView removeFromSuperview]。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以尝试在控制器中使用此代码。它应该适合你。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIView *subview = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    subview.backgroundColor = [UIColor lightGrayColor];
    [subview addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
     action:@selector(subviewTouched)]];
    [self.view addSubview:subview];

    [self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self
     action:@selector(viewTouched)]];
}

- (void)viewTouched
{
    NSLog(@"viewTouched");
}

- (void)subviewTouched
{
    NSLog(@"subviewTouched");
}