在iOS应用中,我按一个按钮,然后会显示一个弹出菜单。
如果我在菜单外的屏幕中触摸任何位置(UITableView
,其他UIButton
),我希望弹出菜单关闭。
如何在屏幕上的UI元素(如UITableView
,UIButton
)处理事件之前拦截触摸事件,以便以编程方式关闭菜单?
我在-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
中尝试了UIViewController
,但它不起作用。我触摸的UI元素将处理事件,因此我无法拦截事件。
答案 0 :(得分:3)
在菜单下添加覆盖整个屏幕的透明UIView
。然后只处理此视图的点击。
答案 1 :(得分:0)
在菜单可见时,将所有视图的userInterActionEnabled
属性设置为NO
。丢弃后,再次将其设置为YES。
- (void) enableOrDisableControlsExceptMenu : (UIView *) parentView :(bool) bEnabled
{
for (UIView * view in parentView.subviews)
{
if (![view isKindOfClass:[YourMenu class]) //YourMenu is the menu view class
view.userInterActionEnabled = bEnabled;
[self enableOrDisableControlsExceptMenu : view :bEnabled];
}
}
当菜单可见时,请调用上述方法,如:
[self enableOrDisableControlsExceptMenu:self.view :NO];
当菜单被丢弃(不可见)时,请将其称为:
[self enableOrDisableControlsExceptMenu:self.view :YES];
答案 2 :(得分:0)
您可以在主窗口中添加UIGestureRecognizer
并拦截触摸。如果你想要的只是一个点击,那么UITapGestureRecognizer
应该完成这项工作。
如果您正在寻找任何类型的触摸,那么我建议使用实现touchesBegan
的自定义GestureRecognizer。