触摸我的子视图外的事件应该导致子视图消失

时间:2011-09-13 13:51:49

标签: iphone ios uiview

我有一个UIView子类,一旦我点击导航栏按钮就会显示。我试图在iphone中模仿UIPopover类型的视图。 我坚持的是,我必须在框外触摸时删除子视图。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

定义弹出视图时,必须定义它的可见rect(帧)。 在主视图控制器中,当用户点击屏幕时,检索触摸位置并检查该点是否未包含在弹出框中。

这只是一个例子来说明这一点:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *aTouch = [touches anyObject];
    if (aTouch.tapCount == 1)
    {
        CGPoint p = [aTouch locationInView:self.view];
        if (!CGRectContainsPoint(yourpopupview.frame, p))
        {
            // dismiss the popup
        }
    }
}

我希望它会对你有所帮助。

答案 1 :(得分:2)

您可以在所有图层上都有一个不可见的图层,以便在子视图出现时检查触摸,并且您可以手动检查坐标是否在子视图中,然后只需从主视图中手动删除它。

您可以在此处查看解除键盘而不是删除视图的示例:

http://www.ke-cai.net/2011/05/tap-background-to-dismiss-keyboard-for.html