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

时间:2011-03-10 17:25:57

标签: iphone objective-c ios sdk

我的iOS应用程序中有一个自定义弹出菜单。 UIView上有按钮。当用户在此视图外部进行修饰时,如何处理事件?我想暂时隐藏菜单。

4 个答案:

答案 0 :(得分:9)

您应该创建一个占据整个屏幕的自定义UIButton。然后在该按钮的顶部添加子视图。然后,当用户点击子视图之外时,他们将点击按钮。

例如,按下这样的按钮:

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 
}

答案 1 :(得分:3)

将其置于全屏透明视图中并处理它的触摸。

答案 2 :(得分:1)

一个想法是拥有一个不可见的视图(uicontrol),它与屏幕一样大,然后保存这个自定义弹出窗口。

答案 3 :(得分:1)

听起来你可以通过从UIControl而不是UIView获取菜单来获得更好的服务。这将简化触摸处理,在这种情况下您需要做的就是为UIControlEventTouchUpOutside设置目标和操作。目标可以是菜单本身,操作会隐藏或关闭菜单。