UIControl轨道触及其视野外

时间:2013-08-23 04:52:34

标签: iphone ios uicontrol

我正在构建一个菜单作为UIControl的子类,当用户触摸它时会打开它,如果用户没有选择其中一个选项,它将关闭。

我正在寻找一种方法来跟踪用户何时触摸外面以便我可以关闭菜单

2 个答案:

答案 0 :(得分:0)

在菜单后面放置一个视图,覆盖设备的整个区域,背景为清晰的颜色。当您的菜单打开时,该视图可见。因为当您在菜单外单击时,它与您的设备具有相同的高度和宽度,您可以使用TapGesture识别该视图或将其设为UIControl。比调用方法隐藏你的菜单和uiview。

希望这会有所帮助。

答案 1 :(得分:0)

我真正想做的是制作一个覆盖整个视图的大按钮,将其放在菜单下方,或者我想要触摸的任何其他内容并发生一些事情。

    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];

在菜单例程中,您可以添加这些相同的例程。您可以传递父视图的框架,或者只是在layoutSubviews例程中查找它,如果您的菜单是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方法放在菜单类中。