我正在构建一个菜单,作为UIControl的子类,当用户触摸它时,它会打开,如果用户没有选择其中一个选项,它会关闭。
我正在寻找一种方法来跟踪用户何时触摸外部,这样我就可以关闭菜单
在菜单后面放一个视图,用透明的背景覆盖设备的整个区域。当您的菜单打开时,使该视图可见。由于它的高度和宽度与您的设备相同,每当您在菜单外单击时,您都可以使用TapGesture识别该视图或将其设为UIControl。调用方法来隐藏菜单和uiview。
希望这会有所帮助。
我真正喜欢做的是制作一个覆盖整个视图的大按钮,并将其放在菜单下方,或者我想触摸的其他东西,然后发生一些事情。
UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.view.frame];
[bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown];
[bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
[self.view addSubview:bigBackButton];
}
- (void)backButtonSelected:(UIButton *)button {
//get rid of the button
[button removeFromSuperview];
//do whatever else you need to do
[yourmenu dosomething];
}
在一些应用程序上,我会将按钮设置为深色和半透明,以突出显示菜单,无论其他什么。其他时候我会让它几乎不可见,比如[UIColor colorWithWhite:1.0 alpha:0.01];
在您的菜单例程中,您可以添加这些相同的例程。如果菜单是UIView的子类,则可以传递父视图的框架,或者只在layoutSubviews例程中查找它。
在布局子视图中,添加以下内容:
UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.superview.frame];
[bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown];
[bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]];
[self.view addSubview:bigBackButton];
然后将backButtonSelected方法也放在菜单类中。