1

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

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

4

2 回答 2

0

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

希望这会有所帮助。

于 2013-08-23T05:03:56.480 回答
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];

在您的菜单例程中,您可以添加这些相同的例程。如果您的菜单是 UIView 的子类,您可以传递父视图的框架,或者只是在 layoutSubviews 例程中查找它。

在您的 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 方法也放入您的菜单类中。

于 2013-08-23T05:13:57.430 回答