我有一个简单的iPad应用程序,其中包含以下层次的视图:
BaseView
(涵盖整个可用区域)。SquareView
(涵盖100x100px区域)。 SquareView
作为子视图添加到BaseView
。
我还有一个BaseViewController.m
文件。在此文件中,我添加了touchesBegan
和touchesEnded
函数来处理触摸事件。问题是,当我点击SquareView
触摸函数被调用时,但当我点击其他任何地方时,他们都不会被调用。
我userInteractionEnabled = YES
SquareView
。我需要设置此变量才能接收触摸。
单击SquareView
外的区域不会触发触摸功能。我很困惑为什么。在userInteractionEnabled
中设置BaseView
变量没有任何影响。这可能发生什么?我缺少一些规则吗?我很确定我有一点工作。
当用户点击子视图(SquareView
)时,我需要启动一个菜单(让我们说MenuView
类)。我们的想法是,当用户点击菜单外的区域(或SquareView
)时,我需要通过调用MenuView
来移除弹出式[menuView removeFromSuperview]
。有没有更好的方法来解决这个问题?
答案 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");
}