使用堆叠视图检测触摸&从UIScrollView传递Touch事件

时间:2011-05-27 20:18:03

标签: ios ipad uiscrollview touches

我正在尝试关闭弹出菜单,如果用户在弹出窗口的范围内选择了除外。换句话说,他们选择背景,弹出窗口关闭。

我目前有一个RootViewController,可以加载带有一堆其他UI元素的UIView。 有一次,弹出一个弹出(自定义)菜单 - 这是一个单独的UIViewController与相关的.xib。它通过以下方式加载到屏幕上:

    SectionsChooserViewController *cv = [[SectionsChooserViewController alloc] initWithNibName:@"SectionsChooserViewController" bundle:[NSBundle mainBundle]];
    cv.view.frame = CGRectMake(584, 391, 314, 346);
    cv.delegate = self;     

此视图仅占据屏幕的一小部分。因此,如果您在视图上,则为此视图添加的触摸检测代码将仅注册回调。

如果我没有处理“SectionsChooserViewController”中的触摸,而是在rootViewController中实现touchesBegan(加载“SectionsChooser ...”),则不会调用90%的视图,因为UIScrollView是我似乎记录了触摸而不是传递它。

有没有办法让UIScrollView传递触摸事件?

编辑:至少我认为 UIScrollView正在接受触摸事件。我不确定 - 我在页面上有近20个UI控件。

编辑:好的,这是UIScrollView。如果我关闭两个scrollView上的交互启用,UIView将获得触摸,但这会打破UIScrollViews - 所以这将无法工作。

1 个答案:

答案 0 :(得分:0)

您可以使用[super touchesBegan:withEvent:]来帮助解决问题。

根据您尝试的操作,您可以使用UIGestureRecognizer捕获触摸事件。

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                        initWithTarget:self action:@selector(handleDoubleTap:)];

doubleTapGestureRecognizer.numberOfTapsRequired = 2; //change value to 1 for single taps
[self addGestureRecognizer:doubleTapGestureRecognizer];