当用户在UIView之外触摸时,如何处理事件?

我有我的iOS应用程序中的自定义popup菜单。 它是带有button的UIView。 当用户在此视图之外触摸时,如何处理事件? 我想在这个时候隐藏菜单。

你应该创build一个自定义的UIButton ,占据整个屏幕。 然后将该子视图添加到该button的顶部。 然后,当用户在子视图外轻敲时,他们将点击button。

例如,使这样的button:

 UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; [button addTarget:self action:@selector(yourhidemethod:) forControlEvents:UIControlEventTouchUpInside]; [button setTitle:@"" forState:UIControlStateNormal]; button.frame = self.view.frame; [self.view addSubview:button]; 

(其中yourhidemethod:是删除您的子视图的方法的名称。)然后添加您的子视图的顶部。


更新:它看起来像你想知道如何检测触摸在视图中的位置。 这是你做的:

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self]; //location is relative to the current view // do something with the touched point } 

把它放在全屏透明的视图,并处理它的触摸。

一个想法是有一个看不见的视图(uicontrol),就像屏幕一样大,然后拥有这个自定义popup窗口。

这听起来像你从UIControl而不是UIView派生你的菜单更好。 这将简化触摸处理,在这种情况下你所要做的就是为UIControlEventTouchUpOutside设置一个目标和动作。 目标可以是菜单本身,动作可以隐藏或closures菜单。